Advanced Message Script - Versione stampabile +- Creare Videogiochi - Game Developer (https://www.making-videogames.net/giochi) +-- Forum: Rpg Maker Italia (https://www.making-videogames.net/giochi/Forum-Rpg-Maker-Italia) +--- Forum: Rpg Maker Xp (https://www.making-videogames.net/giochi/Forum-Rpg-Maker-Xp) +---- Forum: Script Rpg Maker Xp (https://www.making-videogames.net/giochi/Forum-Script-Rpg-Maker-Xp) +---- Discussione: Advanced Message Script (/thread-Advanced-Message-Script) |
Advanced Message Script - war10hacker - 20-09-2012 Questo script permette di modificare vari aspetti dei messaggi che inseriremo nei nostri giochi come per esempio far apparire il messaggio lettera per lettera come in The Legend of Zelda A link to the Past oppure inserire delle pause durante il messaggio. Script: [spoiler]Premetto che lo script è stato creato da DubeAlex (potete visitare la sua community da qui: http://www.dubealex.com/index.php?act=idx ). Questo codice vi permette di inserire alcuni dati come la velocità del messaggio, scritte colorate, inserire il face, e tante altre che spiego più avanti passo per passo. Io ho tradotto le spiegazioni del codice intero, nel caso fosse interessati nel modificare qualcosina, però questo script appartiene a DubeAlex. Potete scaricare una demo della versione inglese di DubeAlex da qui. Prima di tutto posto lo script tradotto. Creiamo una nuova classe sopra Main e chiamiamola Advanced Message Script. Inseriamo tutto questo codice: CODICE #=================================================== # ¦ AMS - Advanced Message Script - R4 [Update #2] #=================================================== # Per informazioni e aggiornamenti sullo script visitate: # www.dubealex.com (Creation Asylum) # # Modificato, aggiustato e migliorato da: Dubealex # Original Script Core by: XRXS Scripter (Jap Dudes) # HTML Hexadecimal color feature from: Phylomorphis # # Ringraziamenti: # Rabu: Per aver aggiunto l'opzione Mostra face # # Traduzione in italiano by Tio # Per più informazioni visitate www.rpgshrine.altervista.org # Per trovare gli ultimi aggiornamenti nello script cercate: #NEW # Per configurare il bottone che fa saltare il dialogo cercare: #SKIP_TEXT_CODE # # May 18, 2005 #=================================================== LETTER_BY_LETTER_MODE = true #Setta la modalità di lettura lettera per lettera #(per toglierla modificare true in false) #=================================================== # ? Inizio CLASSE AMS #=================================================== class AMS attr_accessor :name_box_x_offset attr_accessor :name_box_y_offset attr_accessor :font_type attr_accessor :name_font_type attr_accessor :font_size attr_accessor :name_font_size attr_accessor :message_box_opacity attr_accessor :name_box_skin attr_accessor :name_box_text_color attr_accessor :message_box_text_color attr_accessor :message_box_skin attr_accessor :name_box_width attr_accessor :name_box_height attr_accessor :message_width attr_accessor :message_height attr_accessor :message_x attr_accessor :message_y_bottom attr_accessor :message_y_middle attr_accessor :message_y_top attr_accessor :event_message_x_ofset attr_accessor :event_message_y_ofset def initialize @name_box_x_offset = 0 #Sceglie la posizione X della finestra col nome. Iniziale= 0 @name_box_y_offset = -10 #Sceglie la posizione Y della finestra col nome. Iniziale= -10 @name_box_width = 8 #Sceglie la larghezza della finestra col nome. Iniziale= 8 @name_box_height = 26 #Sceglie l'altezza della finestra col nome. Iniziale= 26 @font_type = "Tahoma" #Sceglie il font per la finestra dei messaggi @name_font_type = "Tahoma" #Sceglie il font per la finestra col nome @font_size = 22 #Sceglie la grandezza del font nella finestra dei messaggi @name_font_size = 22 #Sceglie la grandezza del font per la finestra col nome @name_box_text_color=0 #Sceglie il colore del font per la finestra dei messaggi @message_box_text_color=0 #Sceglie il colore del font per la finestra col nome @message_box_opacity = 160 #Sceglie l'opacità della finestra dei messaggi.Iniziale=160 @message_box_skin = "001-Blue01" #Nome della Windowskin della finestra dei messaggi. @name_box_skin = "001-Blue01" #Nome della Windowskin della finestra col nome. @message_width = 480 #Sceglie la larghezza della finestra dei messaggi. Iniziale=480 @message_height = 160 #Sceglie l'altezza della finestra dei messaggi. Iniziale=160 @message_x = 80 #Sceglie la posizione X della finestra dei messaggi. Iniziale=80 @message_y_bottom = 304 #Sceglie la posizione Y della finestra a partire dal basso. Iniziale=304 @message_y_middle = 160 #Sceglie la posizione Y della finestra a partire dall'alto. Iniziale=160 @message_y_top = 16 #Sceglie la posizione della finestra del nome in alto. Iniziale=16 @event_message_x_ofset = 0 #Sceglie la posizione X della finestra orientata agli eventi. Iniziale=0 @event_message_y_ofset = 48 #Sceglie la posizione Y della finestra orientata agli eventi. Iniziale=48 end end #=================================================== # ? Finisce CLASSE AMS #=================================================== #=================================================== # ? Inizia Classe Window_Message #=================================================== class Window_Message < Window_Selectable alias xrxs9_initialize initialize def initialize @alex_skip = false xrxs9_initialize if $soundname_on_speak == nil then $soundname_on_speak = "" end $gaiji_file = "./Graphics/Gaiji/sample.png" if FileTest.exist?($gaiji_file) @gaiji_cache = Bitmap.new($gaiji_file) else @gaigi_cache = nil end @opacity_text_buf = Bitmap.new(32, 32) end #-------------------------------------------------------------------------- alias xrxs9_terminate_message terminate_message def terminate_message if @name_window_frame != nil @name_window_frame.dispose @name_window_frame = nil end if @name_window_text != nil @name_window_text.dispose @name_window_text = nil end xrxs9_terminate_message end #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.color = text_color($ams.message_box_text_color) self.contents.font.name = $ams.font_type self.contents.font.size = $ams.font_size self.windowskin = RPG::Cache.windowskin($ams.message_box_skin) @x = @y = @max_x = @max_y = @indent = @lines = 0 @face_indent = 0 @opacity = 255 @cursor_width = 0 @write_speed = 0 @write_wait = 0 @mid_stop = false @face_file = nil @popchar = -2 if $game_temp.choice_start == 0 @x = 8 end if $game_temp.message_text != nil @now_text = $game_temp.message_text if (/\A\\[Ff]\[(.+?)\]/.match(@now_text))!=nil then @face_file = $1 + ".png" @x = @face_indent = 128 if FileTest.exist?("Graphics/Pictures/" + $1 + ".png") self.contents.blt(16, 16, RPG::Cache.picture(@face_file), Rect.new(0, 0, 96, 96)) end @now_text.gsub!(/\\[Ff]\[(.*?)\]/) { "" } end begin last_text = @now_text.clone @now_text.gsub!(/\\[Vv]\[([IiWwAaSs]?)([0-9]+)\]/) { convart_value($1, $2.to_i) } end until @now_text == last_text @now_text.gsub!(/\\[Nn]\[([0-9]+)\]/) do $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : "" end #NEW #Dubealex's Stop Skip Text ON-OFF @now_text.gsub!(/\\[%]/) { "\100" } #Fine nuovo comando #NEW #Dubealex's Show Monster Name Feature @now_text.gsub!(/\\[Mm]\[([0-9]+)\]/) do $data_enemies[$1.to_i] != nil ? $data_enemies[$1.to_i].name : "" end #Fine nuovo comando #NEW #Dubealex's Show Item Price Feature @now_text.gsub!(/\\[Pp]rice\[([0-9]+)\]/) do $data_items[$1.to_i] != nil ? $data_items[$1.to_i].price : "" end #Fine nuovo comando #NEW #Dubealex's Show Hero Class Name Feature @now_text.gsub!(/\\[Cc]lass\[([0-9]+)\]/) do $data_classes[$data_actors[$1.to_i].class_id] != nil ? $data_classes[$data_actors[$1.to_i].class_id].name : "" end #Fine nuovo comando #NEW #Dubealex's Show Current Map Name Feature @now_text.gsub!(/\\[Mm]ap/) do $game_map.name != nil ? $game_map.name : "" end #Fine nuovo comando #NEW #Dubealex's Choose Name Box Text Color @now_text.gsub!(/\\[Zz]\[([0-9]+)\]/) do $ams.name_box_text_color=$1.to_i @now_text.sub!(/\\[Zz]\[([0-9]+)\]/) { "" } end #FIne nuovo comando name_window_set = false if (/\\[Nn]ame\[(.+?)\]/.match(@now_text)) != nil name_window_set = true name_text = $1 @now_text.sub!(/\\[Nn]ame\[(.*?)\]/) { "" } end if (/\\[Pp]\[([-1,0-9]+)\]/.match(@now_text))!=nil then @popchar = $1.to_i if @popchar == -1 @x = @indent = 48 @y = 4 end @now_text.gsub!(/\\[Pp]\[([-1,0-9]+)\]/) { "" } end @max_choice_x = 0 if @popchar >= 0 @text_save = @now_text.clone @max_x = 0 @max_y = 4 for i in 0..3 line = @now_text.split(/\n/)[3-i] @max_y -= 1 if line == nil and @max_y <= 4-i next if line == nil line.gsub!(/\\\w\[(\w+)\]/) { "" } cx = contents.text_size(line).width @max_x = cx if cx > @max_x if i >= $game_temp.choice_start @max_choice_x = cx if cx > @max_choice_x end end self.width = @max_x + 32 + @face_indent self.height = (@max_y - 1) * 32 + 64 @max_choice_x -= 68 @max_choice_x -= @face_indent*216/128 else @max_x = self.width - 32 - @face_indent for i in 0..3 line = @now_text.split(/\n/)[i] next if line == nil line.gsub!(/\\\w\[(\w+)\]/) { "" } cx = contents.text_size(line).width if i >= $game_temp.choice_start @max_choice_x = cx if cx > @max_choice_x end end @max_choice_x += 8 end @cursor_width = 0 @now_text.gsub!(/\\\\/) { "0" } @now_text.gsub!(/\\[Cc]\[([0123456789ABCDEF#]+)\]/) { "1[#{$1}]" } @now_text.gsub!(/\\[Gg]/) { "2" } @now_text.gsub!(/\\[Ss]\[([0-9]+)\]/) { "3[#{$1}]" } @now_text.gsub!(/\\[Aa]\[(.*?)\]/) { "4[#{$1}]" } #NEW #Dubealex's Permanent Color Change @now_text.gsub!(/\\[Cc]olor\[([0-9]+)\]/) do $ams.message_box_text_color= $1.to_i @now_text.sub!(/\\[Cc]\[([0-9]+)\]/) { "" } end #Fine nuovo comando #NEW #Dubealex's Font Change Feature @now_text.gsub(/\\[Tt]\[(.*?)\]/) do buftxt = $1.to_s $ams.font_type = buftxt @now_text.sub!(/\\[Tt]\[(.*?)\]/) { "" } end #Fine nuovo comando @now_text.gsub!(/\\[.]/) { "5" } @now_text.gsub!(/\\[|]/) { "6" } @now_text.gsub!(/\\[>]/) { "16" } @now_text.gsub!(/\\[<]/) { "17" } @now_text.gsub!(/\\[!]/) { "20" } @now_text.gsub!(/\\[~]/) { "21" } @now_text.gsub!(/\\[Ee]\[([0-9]+)\]/) { "22[#{$1}]" } @now_text.gsub!(/\\[Ii]/) { "23" } @now_text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "24[#{$1}]" } @now_text.gsub!(/\\[Hh]\[([0-9]+)\]/) { "25[#{$1}]" } @now_text.gsub!(/\\[Bb]\[([0-9]+)\]/) { "26[#{$1}]" } @now_text.gsub!(/\\[Rr]\[(.*?)\]/) { "27[#{$1}]" } reset_window if name_window_set color=$ams.name_box_text_color off_x = $ams.name_box_x_offset off_y = $ams.name_box_y_offset space = 2 x = self.x + off_x - space / 2 y = self.y + off_y - space / 2 w = self.contents.text_size(name_text).width + $ams.name_box_width + space h = $ams.name_box_height + space @name_window_frame = Window_Frame.new(x, y, w, h) @name_window_frame.z = self.z + 1 x = self.x + off_x + 4 y = self.y + off_y @name_window_text = Air_Text.new(x, y, name_text, color) @name_window_text.z = self.z + 2 end end reset_window 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 @now_text = nil if @now_text == "" if @now_text != nil and @mid_stop == false if @write_wait > 0 @write_wait -= 1 return end text_not_skip = LETTER_BY_LETTER_MODE while true @max_x = @x if @max_x < @x @max_y = @y if @max_y < @y if (c = @now_text.slice!(/./m)) != nil if c == "0" c = "\\" end if c == "1" @now_text.sub!(/\[([0123456789ABCDEF#]+)\]/, "") temp_color = $1 color = temp_color.to_i leading_x = temp_color.to_s.slice!(/./m) if leading_x == "#" self.contents.font.color = hex_color(temp_color) next end if color >= 0 and color <= 7 self.contents.font.color = text_color(color) end next end if c == "2" if @gold_window == nil and @popchar <= 0 @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 c = "" end if c == "3" @now_text.sub!(/\[([0-9]+)\]/, "") speed = $1.to_i if speed >= 0 and speed <= 19 @write_speed = speed end c = "" end if c == "4" @now_text.sub!(/\[(.*?)\]/, "") buftxt = $1.dup.to_s if buftxt.match(/\//) == nil and buftxt != "" then $soundname_on_speak = "Audio/SE/" + buftxt else $soundname_on_speak = buftxt.dup end c = "" elsif c == "4" c = "" end if c == "5" @write_wait += 5 c = "" end if c == "6" @write_wait += 20 c = "" end if c == "16" text_not_skip = false c = "" end if c == "17" text_not_skip = true c = "" end if c == "20" @mid_stop = true c = "" end if c == "21" terminate_message return end if c == "23" @indent = @x c = "" end if c == "24" @now_text.sub!(/\[([0-9]+)\]/, "") @opacity = $1.to_i color = self.contents.font.color self.contents.font.name = $ams.font_type self.contents.font.size = $ams.font_size self.contents.font.color = Color.new(color.red, color.green, color.blue, color.alpha * @opacity / 255) c = "" end if c == "25" @now_text.sub!(/\[([0-9]+)\]/, "") self.contents.font.size = [[$1.to_i, 6].max, 32].min c = "" end if c == "26" @now_text.sub!(/\[([0-9]+)\]/, "") @x += $1.to_i c = "" end if c == "27" @now_text.sub!(/\[(.*?)\]/, "") @x += ruby_draw_text(self.contents, @x, @y * line_height + (line_height - self.contents.font.size), $1, @opacity) if $soundname_on_speak != "" Audio.se_play($soundname_on_speak) end c = "" end if c == "30" @now_text.sub!(/\[(.*?)\]/, "") self.contents.blt(@x , @y * line_height + 8, RPG::Cache.icon($1), Rect.new(0, 0, 24, 24)) if $soundname_on_speak != "" Audio.se_play($soundname_on_speak) end @x += 24 c = "" end if c == "\n" @lines += 1 @y += 1 @x = 0 + @indent + @face_indent if @lines >= $game_temp.choice_start @x = 8 + @indent + @face_indent @cursor_width = @max_choice_x end c = "" end if c == "22" @now_text.sub!(/\[([0-9]+)\]/, "") @x += gaiji_draw(4 + @x, @y * line_height + (line_height - self.contents.font.size), $1.to_i) c = "" end #NEW #Dubealex's Text Skip On/OFF Command if c == "\100" if @alex_skip==false @alex_skip=true else @alex_skip=false end c = "" end #Fine nuovo comando if c != "" self.contents.draw_text(0+@x, 32 * @y, 40, 32, c) @x += self.contents.text_size©.width if $soundname_on_speak != "" then Audio.se_play($soundname_on_speak) end end #SKIP_TEXT_CODE # B = Esc, 0 (tastiera numerica), X # C = Invio, Barra spaziatrice e C # A = Shift, Z if Input.press?(Input::C) # <-- Cambia il valore in quella linea if @alex_skip==false text_not_skip = false end end else text_not_skip = true break end if text_not_skip break end end @write_wait += @write_speed 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 = true 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 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 if @mid_stop @mid_stop = false return else 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 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 #-------------------------------------------------------------------------- def get_character(parameter) case parameter when 0 return $game_player else events = $game_map.events return events == nil ? nil : events[parameter] end end #-------------------------------------------------------------------------- def reset_window #GRANDEZZA_MESSAGGIO #POSIZIONE_MESSAGGIO if @popchar >= 0 events = $game_map.events if events != nil character = get_character(@popchar) x = [[character.screen_x - $ams.event_message_x_ofset - self.width / 2, 4].max, 636 - self.width].min y = [[character.screen_y - $ams.event_message_y_ofset - self.height, 4].max, 476 - self.height].min self.x = x self.y = y end elsif @popchar == -1 self.x = -4 self.y = -4 self.width = 648 self.height = 488 else if $game_temp.in_battle self.y = 16 else case $game_system.message_position when 0 self.y = $ams.message_y_top when 1 self.y = $ams.message_y_middle when 2 self.y = $ams.message_y_bottom end self.x = $ams.message_x if @face_file == nil self.width = $ams.message_width self.x = $ams.message_x else if self.width <= 600 self.width = 600 self.x -=60 end end self.height = $ams.message_height end end self.contents = Bitmap.new(self.width - 32, self.height - 32) self.contents.font.color = text_color($ams.message_box_text_color) self.contents.font.name = $ams.font_type self.contents.font.size = $ams.font_size if @face_file != nil self.contents.blt(16, 16, RPG::Cache.picture(@face_file), Rect.new(0, 0, 96, 96)) end if @popchar == -1 self.opacity = 255 self.back_opacity = 0 elsif $game_system.message_frame == 0 self.opacity = 255 self.back_opacity = $ams.message_box_opacity else self.opacity = 0 self.back_opacity = $ams.message_box_opacity end end #-------------------------------------------------------------------------- def gaiji_draw(x, y, num) if @gaiji_cache == nil return 0 else if @gaiji_cache.width < num * 24 return 0 end if self.contents.font.size >= 20 and self.contents.font.size <= 24 size = 24 else size = self.contents.font.size * 100 * 24 / 2200 end self.contents.stretch_blt(Rect.new(x, y, size, size), @gaiji_cache, Rect.new(num * 24, 0, 24, 24)) if $soundname_on_speak != "" then Audio.se_play($soundname_on_speak) end return size end end #-------------------------------------------------------------------------- def line_height return 32 if self.contents.font.size >= 20 and self.contents.font.size <= 24 return 32 else return self.contents.font.size * 15 / 10 end end #-------------------------------------------------------------------------- def ruby_draw_text(target, x, y, str,opacity) sizeback = target.font.size target.font.size * 3 / 2 > 32 ? rubysize = 32 - target.font.size : rubysize = target.font.size / 2 rubysize = [rubysize, 6].max opacity = [[opacity, 0].max, 255].min split_s = str.split(/,/) split_s[0] == nil ? split_s[0] = "" : nil split_s[1] == nil ? split_s[1] = "" : nil height = sizeback + rubysize width = target.text_size(split_s[0]).width target.font.size = rubysize ruby_width = target.text_size(split_s[1]).width target.font.size = sizeback buf_width = [target.text_size(split_s[0]).width, ruby_width].max width - ruby_width != 0 ? sub_x = (width - ruby_width) / 2 : sub_x = 0 if opacity == 255 target.font.size = rubysize target.draw_text(x + sub_x, y - target.font.size, target.text_size(split_s[1]).width, target.font.size, split_s[1]) target.font.size = sizeback target.draw_text(x, y, width, target.font.size, split_s[0]) return width else if @opacity_text_buf.width < buf_width or @opacity_text_buf.height < height @opacity_text_buf.dispose @opacity_text_buf = Bitmap.new(buf_width, height) else @opacity_text_buf.clear end @opacity_text_buf.font.size = rubysize @opacity_text_buf.draw_text(0 , 0, buf_width, rubysize, split_s[1], 1) @opacity_text_buf.font.size = sizeback @opacity_text_buf.draw_text(0 , rubysize, buf_width, sizeback, split_s[0], 1) if sub_x >= 0 target.blt(x, y - rubysize, @opacity_text_buf, Rect.new(0, 0, buf_width, height), opacity) else target.blt(x + sub_x, y - rubysize, @opacity_text_buf, Rect.new(0, 0, buf_width, height), opacity) end return width end end #-------------------------------------------------------------------------- def convart_value(option, index) option == nil ? option = "" : nil option.downcase! case option when "i" unless $data_items[index].name == nil r = sprintf("30[%s]%s", $data_items[index].icon_name, $data_items[index].name) end when "w" unless $data_weapons[index].name == nil r = sprintf("30[%s]%s", $data_weapons[index].icon_name, $data_weapons[index].name) end when "a" unless $data_armors[index].name == nil r = sprintf("30[%s]%s", $data_armors[index].icon_name, $data_armors[index].name) end when "s" unless $data_skills[index].name == nil r = sprintf("30[%s]%s", $data_skills[index].icon_name, $data_skills[index].name) end else r = $game_variables[index] end r == nil ? r = "" : nil return r end #-------------------------------------------------------------------------- def dispose terminate_message if @gaiji_cache != nil unless @gaiji_cache.disposed? @gaiji_cache.dispose end end unless @opacity_text_buf.disposed? @opacity_text_buf.dispose end $game_temp.message_window_showing = false if @input_number_window != nil @input_number_window.dispose end super end #-------------------------------------------------------------------------- def update_cursor_rect if @index >= 0 n = $game_temp.choice_start + @index self.cursor_rect.set(8 + @indent + @face_indent, n * 32, @cursor_width, 32) else self.cursor_rect.empty end end end #========================================= # ? Finisce CLASSE Window_Message #========================================= #========================================= # ? Inizia Classe Window_Frame #========================================= class Window_Frame < Window_Base def initialize(x, y, width, height) super(x, y, width, height) self.windowskin = RPG::Cache.windowskin($ams.name_box_skin) self.contents = nil end #-------------------------------------------------------------------------- def dispose super end end #========================================= # ? Esci CLASSE Window_Frame #========================================= #========================================= # ? Inizia aggiunte classe Game_Map #========================================= class Game_Map #Dubealex's Addition (from XRXS), mostra nome della mappa nel gioco def name $map_infos[@map_id] end end #========================================= # ? Finisce aggiunte classe Game_Map #========================================= #========================================= # ? Inizia aggiunte classe Scene_Title #========================================= class Scene_Title #Dubealex's Addition (from XRXS) mostra nome della mappa nel gioco $map_infos = load_data("Data/MapInfos.rxdata") for key in $map_infos.keys $map_infos[key] = $map_infos[key].name end #Dubealex's addition, salva i dati dei messaggi quando salvi il gioco $ams = AMS.new end #========================================= # ? Finisce aggiunte classe Scene_Title #========================================= #========================================= # ? Inizia aggiunte classe Window_Base #========================================= class Window_Base < Window #Dubealex Addition (from Phylomorphis) per usare i codici dei colori HTML def hex_color(string) red = 0 green = 0 blue = 0 if string.size != 6 print("Vengono usati sei carrateri.") print("Sarà usato il colore bianco per il testo.") return Color.new(255, 255, 255, 255) end for i in 1..6 s = string.slice!(/./m) if s == "#" print("Potrebbe non essere prensete il carattere \"#\".") print("Sarà usato il colore bianco per il testo.") return Color.new(255, 255, 255, 255) end value = hex_convert(s) if value == -1 print("Errore nel convertire il valore.") print("Sarà usato il colore bianco per il testo.") return Color.new(255, 255, 255, 255) end case i when 1 red += value * 16 when 2 red += value when 3 green += value * 16 when 4 green += value when 5 blue += value * 16 when 6 blue += value end end return Color.new(red, green, blue, 255) end #-------------------------------------------------------------------------- def hex_convert(character) case character when "0" return 0 when "1" return 1 when "2" return 2 when "3" return 3 when "4" return 4 when "5" return 5 when "6" return 6 when "7" return 7 when "8" return 8 when "9" return 9 when "A" return 10 when "B" return 11 when "C" return 12 when "D" return 13 when "E" return 14 when "F" return 15 end return -1 end end #========================================= # ? Finisce aggiunte classe Window_Base #========================================= #========================================= # ? Inizia classe Air_Text #========================================= class Air_Text < Window_Base def initialize(x, y, designate_text, color=0) super(x-16, y-16, 32 + designate_text.size * 12, 56) self.opacity = 0 self.back_opacity = 0 self.contents = Bitmap.new(self.width - 32, self.height - 32) w = self.contents.width h = self.contents.height self.contents.font.name = $ams.name_font_type self.contents.font.size = $ams.name_font_size self.contents.font.color = text_color(color) self.contents.draw_text(0, 0, w, h, designate_text) end #-------------------------------------------------------------------------- def dispose self.contents.clear super end end #========================================== # ? Finisce classe Air_Text #========================================== #=================================================== # ? Inizia aggiunte classe Scene_Save #=================================================== class Scene_Save < Scene_File alias ams_original_write_save_data write_save_data def write_save_data(file) ams_original_write_save_data(file) Marshal.dump($ams, file) end end #=================================================== # ? Finisce aggiunte classe Scene_Save #=================================================== #=================================================== # ? Inizia aggiunte classe Scene_Load #=================================================== class Scene_Load < Scene_File alias ams_original_read_save_data read_save_data def read_save_data(file) ams_original_read_save_data(file) $ams = Marshal.load(file) end end #=================================================== # ? Finisce aggiunte classe Scene_Load #=================================================== Ora spiego i comandi che dovranno essere inseriti nei messaggi per avere i vari effetti: Cambiare temporaneamente il colore del testo(Default): \c[IDcolore] Inserite l'id del colore. Potete trovare tutti i colori disponibili nella classe Window_Base a partire dalla stringa 39. 0 sarebbe il bianco. Cambia il colore del testo temporaneamente (con i colore dell'HTML): \c[#000000] Inserite un codice HTML all'interno della parentesi. Per esempio: #000000 = nero #FFFFFF = biaco Mostra la finestra delle monete \G Mostra quante monete ha in possesso il giocatore in una finestra a parte. Mostra il nome eroe \n[HeroID] Usate l'ID dell'eroe (lo trovate nel database da dove create i vostri personaggi) per far mostrare il nome dell'eroe nella finestra. Mostra il nome del mostro \m[MonsterID] Inserite l'ID del mostro per mostrare il nome del mostro nel messaggi. Funzione aggiunta da DubeAlex. Mostra il prezzo di un oggetto \Price[ItemID] Inserire l'ID dell'oggetto per mostrarne il prezzo nella finestra. Funzione aggiunta da DubeAlex. Mostra il nome della mappa attuale: \Map Mostrerà il nome della mappa in cui vi trovate. Funzione aggiunta da DubeAlex. Mostrare la faccia nella finestra dei messaggi \f[NOMEFACCIA] Sostituite NOMEFACCIA con il nome del file grafico che si deve trovare importato nella directory Graphics/Pictures del vostro progetto. Dev'essere un file .PNG di 96x96 pixel. Non è necessario scrivere l'estensione del file. Mostra la classe di un personaggio \Class[ClassID] Usate ID del nome della classe dell'eroe per mostrare la classe dell'eroe nella finestra. Funzione aggiunta da DubeAlex. Mostrare nomi di Variabili, oggetti, armi, armature e poteri \v[xID] Sostituite la X con una di queste opzioni: Variable = Non scrivete niente, basta questo: \v[VariableID] Items = i + itemID --> \v[iID] Armors = a + armorID --> \v[aID] Weapons = w + weaponID --> \v[wID] Skills = s + skillID --> \v[sID] Aggiungere finestra col nome \Name[text] Usate questo codice per mostrare una finestra sopra la finestra del messaggio contenente il nome di chi parla. Potete usare una variabile o altri comandi ocme "Mostra nome eroe" in questa finestra. Esempi: \Name[\v[12]] --> Mostrerà il nome della variabile ID# 12 nella finestra del nome. \Name[Dubealex] --> Mostrerà "Dubealex" nella finestra del nome. \Name[\n[1]] --> Mostrerà il nome dell'eroe 1 nella finestra del nome. Modificare l'opacità del testo: \o[Opacity] Inserite un numero fra 0 e 255 per cambiare l'opacità. 255 è completamente opaco e 0 è invisibile. Modificare la velocità del testo \s[Speed] Per modificare la velocità dl testo scorrevole, inserite un numero fra 1 e 19 (1 + veloce, 19 + lento). Modificare la grandezza del testo \h[Size] Inserite un numero fra 6 e 32 per cambiare la grandezza del testo. 6 è più piccolo e 32 più grande. Mostra la finestra del messaggio sopra l'eroe o un evento \p[Option] Fa apparire la finestra del messaggio sopra un evento o l'eroe. Opzioni disponibili: \p[Event ID] \P[0] \p[-1] Using "\p[Event ID]" la finestra sarà sopra l'evento di cui scrivere l'ID. Using "\p[0]" la finestra apparirà sopra l'eroe. Using "\p[-1]" farà una finestra senza bordi e senza sfondo. Pause nei messaggi \| --> Pausa di un secondo \. --> Pausa di 0,25 secondi \~ --> Chiude la finestra appena appare questo comando (va inserito alla fine quindi) \! --> Aspetta che il giocatore prema il tasto per andare avanti \\ --> Mostra il carattere \ Settare ON-OFF il testo lettera per lettera: \< --> Setta ON \> --> Setta OFF Cambiare il carattere nel messaggio: \t[FontName] FontName deve essere un .TTf nella cartella Windows/Fonts e deve essere caso sensitivo. Funzione aggiunta da DubeAlex. Far iniziare un SE durante il messaggio(permanente): \a[FileName] Il file dev'essere importato in Sounds/SE Per fermarlo usate il comando \a[]. Lasciate l'interno delle parentesi vuoto o la canzone suonerà all'infinito. Attiva/Disattiva il tasto per saltare i dialoghi \% Comando che permette di non far saltare i dialoghi al giocatore (utile se si fanno dei testi a tempo con la musica). Per eliminare l'opzione dal gioco reinserire il comando. Funzione aggiunta da DubeAlex. Modificare il colore del nome nella finestra del nome(permanente) \z[ColorID] Come l'altro comando per i colori, solo che cambia il nome nella finestra nel nome. Funzione aggiunta da DubeAlex. Cambia il colore del testo nella finestra dei messaggi (permanente): \Color[ColorID] Come l'altro comando per i colori, solo che lo cambia permanentemente. Funzione aggiunta da DubeAlex[/spoiler] Autore: DubeAlex, Tio per la traduzione in ITA e Rabu per un aggiunta allo script. RE: Advanced Message Script - jackez - 09-03-2013 Grazie mille!!! |