Не исчезает портрет в MenuScreenWhileMessage

Проект года 2 место Проект месяца 1 место Проект месяца 3 место
Больше
11 года 4 мес. назад - 11 года 4 мес. назад #77089 от Eokati
У меня проблема со скриптом MenuScreen While Message (позволяет выйти в меню во время сообщения)
Code:
#=================================== # MenuScreen While Message (MSWM) #=================================== # by bStefan aka. regendo # by request from AABattery # : http://www.rpgmakervxace.net/index.php?/user/608-aabattery/ # please give credit if used # for use with RMVX ACE #=================================== # Call Scene_Menu while a message # : is being displayed #=================================== # implement over Main #=================================== # customize: # : add Scenes you don't want the # : script to happen to NOCALLMENU # : (like Scene_Battle, which would # : be really annoying) #=================================== module Regendo unless @scripts @scripts = Hash.new def self.contains?(key) @scripts[key] == true end end @scripts["Menu_during_Message"] = true module Menu_during_Message #======= #CONFIG #======= NOCALLMENU = [Scene_Battle] #scenes in which call_menu shall not work. BUTTON = Input::B #which button will trigger the menu? end end class Window_Message < Window_Base BUTTON = Regendo::Menu_during_Message::BUTTON NOCALLMENU = Regendo::Menu_during_Message::NOCALLMENU alias update_old update def update update_old call_menu if Input.trigger?(BUTTON) && !forbidden_scene_by_regendo end def call_menu Sound.play_ok SceneManager.call(Scene_Menu) Window_MenuCommand::init_command_position end def input_pause self.pause = true wait(10) case BUTTON when Input::B Fiber.yield until Input.trigger?(:C) when Input::C Fiber.yield until Input.trigger?(:B) else Fiber.yield until Input.trigger?(:B) || Input.trigger?(:C) end Input.update self.pause = false end def forbidden_scene_by_regendo return false unless NOCALLMENU NOCALLMENU.any? do |scene| SceneManager.scene_is?(scene) end end end

Yanfly Engine Ace - Ace Message System
Code:
#============================================================================== # # ▼ Yanfly Engine Ace - Ace Message System v1.04 # -- Last Updated: 2012.01.13 # -- Level: Normal # -- Requires: n/a # #============================================================================== $imported = {} if $imported.nil? $imported["YEA-MessageSystem"] = true #============================================================================== # ▼ Updates # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # 2012.01.13 - Bug Fixed: Negative tags didn't display other party members. # 2012.01.12 - Compatibility Update: Message Actor Codes # 2012.01.10 - Added Feature: \pic[x] text code. # 2012.01.04 - Bug Fixed: \ic tag was \ii. No longer the case. # - Added: Scroll Text window now uses message window font. # 2011.12.31 - Started Script and Finished. # #============================================================================== # ▼ Introduction # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # While RPG Maker VX Ace certainly improved the message system a whole lot, it # wouldn't hurt to add in a few more features, such as name windows, converting # textcodes to write out the icons and/or names of items, weapons, armours, and # more in quicker fashion. This script also gives the developer the ability to # adjust the size of the message window during the game, give it a separate # font, and to give the player a text fast-forward feature. # #============================================================================== # ▼ Instructions # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # To install this script, open up your script editor and copy/paste this script # to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save. # # ----------------------------------------------------------------------------- # Message Window text Codes - These go inside of your message window. # ----------------------------------------------------------------------------- # Default: Effect: # \v[x] - Writes variable x's value. # \n[x] - Writes actor x's name. # \p[x] - Writes party member x's name. # \g - Writes gold currency name. # \c[x] - Changes the colour of the text to x. # \i[x] - Draws icon x at position of the text. # \{ - Makes text bigger by 8 points. # \} - Makes text smaller by 8 points. # \$ - Opens gold window. # \. - Waits 15 frames (quarter second). # \| - Waits 60 frames (a full second). # \! - Waits until key is pressed. # \> - Following text is instant. # \< - Following text is no longer instant. # \^ - Skips to the next message. # \\ - Writes a "\" in the window. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Wait: Effect: # \w[x] - Waits x frames (60 frames = 1 second). Message window only. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # NameWindow: Effect: # \n<x> - Creates a name box with x string. Left side. *Note # \nc<x> - Creates a name box with x string. Centered. *Note # \nr<x> - Creates a name box with x string. Right side. *Note # # *Note: Works for message window only. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Position: Effect: # \px[x] - Sets x position of text to x. # \py[x] - Sets y position of text to y. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Picture: Effect: # \pic[x] - Draws picture x from the Graphics\Pictures folder. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Outline: Effect: # \oc[x] - Sets outline colour to x. # \oo[x] - Sets outline opacity to x. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Font: Effect: # \fr - Resets all font changes. # \fz[x] - Changes font size to x. # \fn[x] - Changes font name to x. # \fb - Toggles font boldness. # \fi - Toggles font italic. # \fo - Toggles font outline. # \fs - Toggles font shadow. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Actor: Effect: # \af[x] - Shows face of actor x. *Note # \ac[x] - Writes out actor's class name. *Note # \as[x] - Writes out actor's subclass name. Req: Class System. *Note # \an[x] - Writes out actor's nickname. *Note # # *Note: If x is 0 or negative, it will show the respective # party member's face instead. # 0 - Party Leader # -1 - 1st non-leader member. # -2 - 2nd non-leader member. So on. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Names: Effect: # \nc[x] - Writes out class x's name. # \ni[x] - Writes out item x's name. # \nw[x] - Writes out weapon x's name. # \na[x] - Writes out armour x's name. # \ns[x] - Writes out skill x's name. # \nt[x] - Writes out state x's name. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Icon Names: Effect: # \ic[x] - Writes out class x's name including icon. * # \ii[x] - Writes out item x's name including icon. # \iw[x] - Writes out weapon x's name including icon. # \ia[x] - Writes out armour x's name including icon. # \is[x] - Writes out skill x's name including icon. # \it[x] - Writes out state x's name including icon. # # *Note: Requires YEA - Class System # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # And those are the text codes added with this script. Keep in mind that some # of these text codes only work for the Message Window. Otherwise, they'll work # for help descriptions, actor biographies, and others. # #============================================================================== # ▼ Compatibility # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # This script is made strictly for RPG Maker VX Ace. It is highly unlikely that # it will run with RPG Maker VX without adjusting. # #============================================================================== module YEA module MESSAGE #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # - General Message Settings - #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # The following below will adjust the basic settings and that will affect # the majority of the script. Adjust them as you see fit. #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # This button is the button used to make message windows instantly skip # forward. Hold down for the effect. Note that when held down, this will # speed up the messages, but still wait for the pauses. However, it will # automatically go to the next page when prompted. TEXT_SKIP = :A # Input::A is the shift button on keyboard. # This variable adjusts the number of visible rows shown in the message # window. If you do not wish to use this feature, set this constant to 0. # If the row value is 0 or below, it will automatically default to 4 rows. VARIABLE_ROWS = 21 # This variable adjusts the width of the message window shown. If you do # not wish to use this feature, set this constant to 0. If the width value # is 0 or below, it will automatically default to the screen width. VARIABLE_WIDTH = 22 # This is the amount of space that the message window will indent whenever # a face is used. Default: 112 FACE_INDENT_X = 112 #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # - Name Window Settings - #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # The name window is a window that appears outside of the main message # window box to display whatever text is placed inside of it like a name. #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- NAME_WINDOW_X_BUFFER = 0 # Buffer x position of the name window. NAME_WINDOW_Y_BUFFER = 0 # Buffer y position of the name window. NAME_WINDOW_PADDING = 20 # Padding added to the horizontal position. NAME_WINDOW_OPACITY = 255 # Opacity of the name window. NAME_WINDOW_COLOUR = 6 # Text colour used by default for names. #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # - Message Font Settings - #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # Ace Message System separates the in-game system font form the message # font. Adjust the settings here for your fonts. #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # This array constant determines the fonts used. If the first font does not # exist on the player's computer, the next font in question will be used # in place instead and so on. MESSAGE_WINDOW_FONT_NAME = ["Bookman Old Style", "Arial", "Courier New"] # These adjust the other settings regarding the way the game font appears # including the font size, whether or not the font is bolded by default, # italic by default, etc. MESSAGE_WINDOW_FONT_SIZE = 22 # Font size. MESSAGE_WINDOW_FONT_BOLD = true # Default bold? MESSAGE_WINDOW_FONT_ITALIC = false # Default italic? MESSAGE_WINDOW_FONT_OUTLINE = true # Default outline? MESSAGE_WINDOW_FONT_SHADOW = false # Default shadow? end # MESSAGE end # YEA #============================================================================== # ▼ Editting anything past this point may potentially result in causing # computer damage, incontinence, explosion of user's head, coma, death, and/or # halitosis so edit at your own risk. #============================================================================== #============================================================================== # ■ Variable #============================================================================== module Variable #-------------------------------------------------------------------------- # self.message_rows #-------------------------------------------------------------------------- def self.message_rows return 4 if YEA::MESSAGE::VARIABLE_ROWS <= 0 return 4 if $game_variables[YEA::MESSAGE::VARIABLE_ROWS] <= 0 return $game_variables[YEA::MESSAGE::VARIABLE_ROWS] end #-------------------------------------------------------------------------- # self.message_width #-------------------------------------------------------------------------- def self.message_width return Graphics.width if YEA::MESSAGE::VARIABLE_WIDTH <= 0 return Graphics.width if $game_variables[YEA::MESSAGE::VARIABLE_WIDTH] <= 0 return $game_variables[YEA::MESSAGE::VARIABLE_WIDTH] end end # Variable #============================================================================== # ■ Game_Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # overwrite method: command_101 #-------------------------------------------------------------------------- def command_101 wait_for_message $game_message.face_name = @params[0] $game_message.face_index = @params[1] $game_message.background = @params[2] $game_message.position = @params[3] while continue_message_string? @index += 1 if @list[@index].code == 401 $game_message.add(@list[@index].parameters[0]) end break if $game_message.texts.size >= Variable.message_rows end case next_event_code when 102 @index += 1 setup_choices(@list[@index].parameters) when 103 @index += 1 setup_num_input(@list[@index].parameters) when 104 @index += 1 setup_item_choice(@list[@index].parameters) end wait_for_message end #-------------------------------------------------------------------------- # new method: continue_message_string? #-------------------------------------------------------------------------- def continue_message_string? return true if next_event_code == 101 && Variable.message_rows > 4 return next_event_code == 401 end end # Game_Interpreter #============================================================================== # ■ Window_Base #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # new method: setup_message_font #-------------------------------------------------------------------------- def setup_message_font @message_font = true change_color(normal_color) contents.font.out_color = Font.default_out_color contents.font.name = YEA::MESSAGE::MESSAGE_WINDOW_FONT_NAME contents.font.size = YEA::MESSAGE::MESSAGE_WINDOW_FONT_SIZE contents.font.bold = YEA::MESSAGE::MESSAGE_WINDOW_FONT_BOLD contents.font.italic = YEA::MESSAGE::MESSAGE_WINDOW_FONT_ITALIC contents.font.outline = YEA::MESSAGE::MESSAGE_WINDOW_FONT_OUTLINE contents.font.shadow = YEA::MESSAGE::MESSAGE_WINDOW_FONT_SHADOW end #-------------------------------------------------------------------------- # alias method: reset_font_settings #-------------------------------------------------------------------------- alias window_base_reset_font_settings_ams reset_font_settings def reset_font_settings if @message_font setup_message_font else window_base_reset_font_settings_ams contents.font.out_color = Font.default_out_color contents.font.outline = Font.default_outline contents.font.shadow = Font.default_shadow end end #-------------------------------------------------------------------------- # alias method: convert_escape_characters #-------------------------------------------------------------------------- alias window_base_convert_escape_characters_ams convert_escape_characters def convert_escape_characters(text) result = window_base_convert_escape_characters_ams(text) result = convert_ace_message_system_new_escape_characters(result) return result end #-------------------------------------------------------------------------- # new method: convert_ace_message_system_new_escape_characters #-------------------------------------------------------------------------- def convert_ace_message_system_new_escape_characters(result) #--- result.gsub!(/\eFR/i) { "\eAMSF[0]" } result.gsub!(/\eFB/i) { "\eAMSF[1]" } result.gsub!(/\eFI/i) { "\eAMSF[2]" } result.gsub!(/\eFO/i) { "\eAMSF[3]" } result.gsub!(/\eFS/i) { "\eAMSF[4]" } #--- result.gsub!(/\eAC\[([-+]?\d+)\]/i) { escape_actor_class_name($1.to_i) } result.gsub!(/\eAS\[([-+]?\d+)\]/i) { escape_actor_subclass_name($1.to_i) } result.gsub!(/\eAN\[([-+]?\d+)\]/i) { escape_actor_nickname($1.to_i) } #--- result.gsub!(/\eNC\[(\d+)\]/i) { $data_classes[$1.to_i].name } result.gsub!(/\eNI\[(\d+)\]/i) { $data_items[$1.to_i].name } result.gsub!(/\eNW\[(\d+)\]/i) { $data_weapons[$1.to_i].name } result.gsub!(/\eNA\[(\d+)\]/i) { $data_armors[$1.to_i].name } result.gsub!(/\eNS\[(\d+)\]/i) { $data_skills[$1.to_i].name } result.gsub!(/\eNT\[(\d+)\]/i) { $data_states[$1.to_i].name } #--- result.gsub!(/\eIC\[(\d+)\]/i) { escape_icon_item($1.to_i, :class) } result.gsub!(/\eII\[(\d+)\]/i) { escape_icon_item($1.to_i, :item) } result.gsub!(/\eIW\[(\d+)\]/i) { escape_icon_item($1.to_i, :weapon) } result.gsub!(/\eIA\[(\d+)\]/i) { escape_icon_item($1.to_i, :armour) } result.gsub!(/\eIS\[(\d+)\]/i) { escape_icon_item($1.to_i, :skill) } result.gsub!(/\eIT\[(\d+)\]/i) { escape_icon_item($1.to_i, :state) } #--- return result end #-------------------------------------------------------------------------- # new method: escape_actor_class_name #-------------------------------------------------------------------------- def escape_actor_class_name(actor_id) actor_id = $game_party.members[actor_id.abs].id if actor_id <= 0 actor = $game_actors[actor_id] return "" if actor.nil? return actor.class.name end #-------------------------------------------------------------------------- # new method: actor_subclass_name #-------------------------------------------------------------------------- def escape_actor_subclass_name(actor_id) return "" unless $imported["YEA-ClassSystem"] actor_id = $game_party.members[actor_id.abs].id if actor_id <= 0 actor = $game_actors[actor_id] return "" if actor.nil? return "" if actor.subclass.nil? return actor.subclass.name end #-------------------------------------------------------------------------- # new method: escape_actor_nickname #-------------------------------------------------------------------------- def escape_actor_nickname(actor_id) actor_id = $game_party.members[actor_id.abs].id if actor_id <= 0 actor = $game_actors[actor_id] return "" if actor.nil? return actor.nickname end #-------------------------------------------------------------------------- # new method: escape_icon_item #-------------------------------------------------------------------------- def escape_icon_item(data_id, type) case type when :class return "" unless $imported["YEA-ClassSystem"] icon = $data_classes[data_id].icon_index name = $data_items[data_id].name when :item icon = $data_items[data_id].icon_index name = $data_items[data_id].name when :weapon icon = $data_weapons[data_id].icon_index name = $data_weapons[data_id].name when :armour icon = $data_armors[data_id].icon_index name = $data_armors[data_id].name when :skill icon = $data_skills[data_id].icon_index name = $data_skills[data_id].name when :state icon = $data_states[data_id].icon_index name = $data_states[data_id].name else; return "" end text = "\eI[#{icon}]" + name return text end #-------------------------------------------------------------------------- # alias method: process_escape_character #-------------------------------------------------------------------------- alias window_base_process_escape_character_ams process_escape_character def process_escape_character(code, text, pos) case code.upcase #--- when 'FZ' contents.font.size = obtain_escape_param(text) when 'FN' text.sub!(/\[(.*?)\]/, "") font_name = $1.to_s font_name = Font.default_name if font_name.nil? contents.font.name = font_name.to_s #--- when 'OC' colour = text_color(obtain_escape_param(text)) contents.font.out_color = colour when 'OO' contents.font.out_color.alpha = obtain_escape_param(text) #--- when 'AMSF' case obtain_escape_param(text) when 0; reset_font_settings when 1; contents.font.bold = !contents.font.bold when 2; contents.font.italic = !contents.font.italic when 3; contents.font.outline = !contents.font.outline when 4; contents.font.shadow = !contents.font.shadow end #--- when 'PX' pos[:x] = obtain_escape_param(text) when 'PY' pos[:y] = obtain_escape_param(text) #--- when 'PIC' text.sub!(/\[(.*?)\]/, "") bmp = Cache.picture($1.to_s) rect = Rect.new(0, 0, bmp.width, bmp.height) contents.blt(pos[:x], pos[:y], bmp, rect) #--- else window_base_process_escape_character_ams(code, text, pos) end end end # Window_Base #============================================================================== # ■ Window_ChoiceList #============================================================================== class Window_ChoiceList < Window_Command #-------------------------------------------------------------------------- # alias method: initialize #-------------------------------------------------------------------------- alias window_choicelist_initialize_ams initialize def initialize(message_window) window_choicelist_initialize_ams(message_window) setup_message_font end end # Window_ChoiceList #============================================================================== # ■ Window_ScrollText #============================================================================== class Window_ScrollText < Window_Base #-------------------------------------------------------------------------- # alias method: initialize #-------------------------------------------------------------------------- alias window_scrolltext_initialize_ams initialize def initialize window_scrolltext_initialize_ams setup_message_font end end # Window_ScrollText #============================================================================== # ■ Window_NameMessage #============================================================================== class Window_NameMessage < Window_Base #-------------------------------------------------------------------------- # initialize #-------------------------------------------------------------------------- def initialize(message_window) @message_window = message_window super(0, 0, Graphics.width, fitting_height(1)) self.opacity = YEA::MESSAGE::NAME_WINDOW_OPACITY self.z = @message_window.z + 1 self.openness = 0 setup_message_font @close_counter = 0 deactivate end #-------------------------------------------------------------------------- # update #-------------------------------------------------------------------------- def update super return if self.active return if self.openness == 0 return if @closing @close_counter -= 1 return if @close_counter > 0 close end #-------------------------------------------------------------------------- # start_close #-------------------------------------------------------------------------- def start_close @close_counter = 4 deactivate end #-------------------------------------------------------------------------- # force_close #-------------------------------------------------------------------------- def force_close @close_counter = 0 deactivate close end #-------------------------------------------------------------------------- # start #-------------------------------------------------------------------------- def start(text, x_position) @text = text.clone set_width create_contents set_x_position(x_position) set_y_position refresh activate open end #-------------------------------------------------------------------------- # set_width #-------------------------------------------------------------------------- def set_width text = @text.clone dw = standard_padding * 2 + text_size(text).width dw += YEA::MESSAGE::NAME_WINDOW_PADDING * 2 dw += calculate_size(text.slice!(0, 1), text) until text.empty? self.width = dw end #-------------------------------------------------------------------------- # calculate_size #-------------------------------------------------------------------------- def calculate_size(code, text) case code when "\e" return calculate_escape_code_width(obtain_escape_code(text), text) else return 0 end end #-------------------------------------------------------------------------- # calculate_escape_code_width #-------------------------------------------------------------------------- def calculate_escape_code_width(code, text) dw = -text_size("\e").width - text_size(code).width case code.upcase when 'C', 'OC', 'OO' dw += -text_size("[" + obtain_escape_param(text).to_s + "]").width return dw when 'I' dw += -text_size("[" + obtain_escape_param(text).to_s + "]").width dw += 24 return dw when '{' make_font_bigger when '}' make_font_smaller when 'FZ' contents.font.size = obtain_escape_param(text) when 'FN' text.sub!(/\[(.*?)\]/, "") font_name = $1.to_s font_name = Font.default_name if font_name.nil? contents.font.name = font_name.to_s when 'AMSF' case obtain_escape_param(text) when 0; reset_font_settings when 1; contents.font.bold = !contents.font.bold when 2; contents.font.italic = !contents.font.italic when 3; contents.font.outline = !contents.font.outline when 4; contents.font.shadow = !contents.font.shadow end else return dw end end #-------------------------------------------------------------------------- # set_y_position #-------------------------------------------------------------------------- def set_x_position(x_position) case x_position when 1 # Left self.x = @message_window.x self.x += YEA::MESSAGE::NAME_WINDOW_X_BUFFER when 2 # 3/10 self.x = @message_window.x self.x += @message_window.width * 3 / 10 self.x -= self.width / 2 when 3 # Center self.x = @message_window.x self.x += @message_window.width / 2 self.x -= self.width / 2 when 4 # 7/10 self.x = @message_window.x self.x += @message_window.width * 7 / 10 self.x -= self.width / 2 when 5 # Right self.x = @message_window.x + @message_window.width self.x -= self.width self.x -= YEA::MESSAGE::NAME_WINDOW_X_BUFFER end self.x = [[self.x, Graphics.width - self.width].min, 0].max end #-------------------------------------------------------------------------- # set_y_position #-------------------------------------------------------------------------- def set_y_position case $game_message.position when 0 self.y = @message_window.height self.y -= YEA::MESSAGE::NAME_WINDOW_Y_BUFFER else self.y = @message_window.y - self.height self.y += YEA::MESSAGE::NAME_WINDOW_Y_BUFFER end end #-------------------------------------------------------------------------- # refresh #-------------------------------------------------------------------------- def refresh contents.clear reset_font_settings @text = sprintf("\eC[%d]%s", YEA::MESSAGE::NAME_WINDOW_COLOUR, @text) draw_text_ex(YEA::MESSAGE::NAME_WINDOW_PADDING, 0, @text) end end # Window_NameMessage #============================================================================== # ■ Window_Message #============================================================================== class Window_Message < Window_Base #-------------------------------------------------------------------------- # alias method: initialize #-------------------------------------------------------------------------- alias window_message_initialize_ams initialize def initialize window_message_initialize_ams setup_message_font end #-------------------------------------------------------------------------- # overwrite method: window_width #-------------------------------------------------------------------------- def window_width return Variable.message_width end #-------------------------------------------------------------------------- # overwrite method: window_height #-------------------------------------------------------------------------- def window_height return fitting_height(Variable.message_rows) end #-------------------------------------------------------------------------- # alias method: create_all_windows #-------------------------------------------------------------------------- alias window_message_create_all_windows_ams create_all_windows def create_all_windows window_message_create_all_windows_ams @name_window = Window_NameMessage.new(self) end #-------------------------------------------------------------------------- # overwrite method: create_back_bitmap #-------------------------------------------------------------------------- def create_back_bitmap @back_bitmap = Bitmap.new(width, height) rect1 = Rect.new(0, 0, Graphics.width, 12) rect2 = Rect.new(0, 12, Graphics.width, fitting_height(4) - 24) rect3 = Rect.new(0, fitting_height(4) - 12, Graphics.width, 12) @back_bitmap.gradient_fill_rect(rect1, back_color2, back_color1, true) @back_bitmap.fill_rect(rect2, back_color1) @back_bitmap.gradient_fill_rect(rect3, back_color1, back_color2, true) end #-------------------------------------------------------------------------- # alias method: dispose_all_windows #-------------------------------------------------------------------------- alias window_message_dispose_all_windows_ams dispose_all_windows def dispose_all_windows window_message_dispose_all_windows_ams @name_window.dispose end #-------------------------------------------------------------------------- # alias method: update_all_windows #-------------------------------------------------------------------------- alias window_message_update_all_windows_ams update_all_windows def update_all_windows window_message_update_all_windows_ams @name_window.update @name_window.back_opacity = self.back_opacity @name_window.opacity = self.opacity end #-------------------------------------------------------------------------- # alias method: update_show_fast #-------------------------------------------------------------------------- alias window_message_update_show_fast_ams update_show_fast def update_show_fast @show_fast = true if Input.press?(YEA::MESSAGE::TEXT_SKIP) window_message_update_show_fast_ams end #-------------------------------------------------------------------------- # overwrite method: input_pause #-------------------------------------------------------------------------- def input_pause self.pause = true wait(10) Fiber.yield until Input.trigger?(:B) || Input.trigger?(:C) || Input.press?(YEA::MESSAGE::TEXT_SKIP) Input.update self.pause = false end #-------------------------------------------------------------------------- # overwrite method: convert_escape_characters #-------------------------------------------------------------------------- def convert_escape_characters(text) result = super(text.to_s.clone) result = namebox_escape_characters(result) result = message_escape_characters(result) return result end #-------------------------------------------------------------------------- # new method: namebox_escape_characters #-------------------------------------------------------------------------- def namebox_escape_characters(result) result.gsub!(/\eN\<(.+?)\>/i) { namewindow($1, 1) } result.gsub!(/\eN1\<(.+?)\>/i) { namewindow($1, 1) } result.gsub!(/\eN2\<(.+?)\>/i) { namewindow($1, 2) } result.gsub!(/\eNC\<(.+?)\>/i) { namewindow($1, 3) } result.gsub!(/\eN3\<(.+?)\>/i) { namewindow($1, 3) } result.gsub!(/\eN4\<(.+?)\>/i) { namewindow($1, 4) } result.gsub!(/\eN5\<(.+?)\>/i) { namewindow($1, 5) } result.gsub!(/\eNR\<(.+?)\>/i) { namewindow($1, 5) } return result end #-------------------------------------------------------------------------- # new method: namebox #-------------------------------------------------------------------------- def namewindow(text, position) @name_text = text @name_position = position return "" end #-------------------------------------------------------------------------- # new method: message_escape_characters #-------------------------------------------------------------------------- def message_escape_characters(result) result.gsub!(/\eAF\[(\d+)\]/i) { change_face($1.to_i) } return result end #-------------------------------------------------------------------------- # new method: change_face #-------------------------------------------------------------------------- def change_face(actor_id) actor_id = $game_party.members[actor_id.abs].id if actor_id <= 0 actor = $game_actors[actor_id] return "" if actor.nil? $game_message.face_name = actor.face_name $game_message.face_index = actor.face_index return "" end #-------------------------------------------------------------------------- # alias method: new_page #-------------------------------------------------------------------------- alias window_message_new_page_ams new_page def new_page(text, pos) adjust_message_window_size window_message_new_page_ams(text, pos) end #-------------------------------------------------------------------------- # overwrite method: new_line_x #-------------------------------------------------------------------------- def new_line_x return $game_message.face_name.empty? ? 0 : YEA::MESSAGE::FACE_INDENT_X end #-------------------------------------------------------------------------- # new method: adjust_message_window_size #-------------------------------------------------------------------------- def adjust_message_window_size self.height = window_height self.width = window_width create_contents update_placement self.x = (Graphics.width - self.width) / 2 start_name_window end #-------------------------------------------------------------------------- # new method: clear_name_window #-------------------------------------------------------------------------- def clear_name_window @name_text = "" @name_position = 0 end #-------------------------------------------------------------------------- # new method: start_name_window #-------------------------------------------------------------------------- def start_name_window return if @name_text == "" @name_window.start(@name_text, @name_position) end #-------------------------------------------------------------------------- # overwrite method: fiber_main #-------------------------------------------------------------------------- def fiber_main $game_message.visible = true update_background update_placement loop do process_all_text if $game_message.has_text? process_input $game_message.clear @gold_window.close @name_window.start_close Fiber.yield break unless text_continue? end close_and_wait $game_message.visible = false @fiber = nil end #-------------------------------------------------------------------------- # alias method: open_and_wait #-------------------------------------------------------------------------- alias window_message_open_and_wait_ams open_and_wait def open_and_wait clear_name_window adjust_message_window_size window_message_open_and_wait_ams end #-------------------------------------------------------------------------- # alias method: close_and_wait #-------------------------------------------------------------------------- alias window_message_close_and_wait_ams close_and_wait def close_and_wait @name_window.force_close window_message_close_and_wait_ams end #-------------------------------------------------------------------------- # alias method: all_close? #-------------------------------------------------------------------------- alias window_message_all_close_ams all_close? def all_close? return window_message_all_close_ams && @name_window.close? end #-------------------------------------------------------------------------- # alias method: process_escape_character #-------------------------------------------------------------------------- alias window_message_process_escape_character_ams process_escape_character def process_escape_character(code, text, pos) case code.upcase when 'W' # Wait wait(obtain_escape_param(text)) else window_message_process_escape_character_ams(code, text, pos) end end end # Window_Message #============================================================================== # # ▼ End of File # #==============================================================================

и Yami Engine Ace - Pop Message (немного переделана под мой проект)
Code:
$imported = {} if $imported.nil? $imported["YES-PopMessage"] = true module YES module POP_MESSAGE #=========================================================================== # - Limit Settings - #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # The following below will adjust the limit options for pop message. #=========================================================================== LIMIT_SETTING = { # Start. :width => 0, # Set to 0 to disable limitation. :lines => 4, # Set to 0 to disable limitation. } # End. #=========================================================================== # - Effect Settings - #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # The following below will adjust the effect options for pop message. #=========================================================================== EFFECT_SETTING = { # Start. :default_face => false,# Use default face draw. # Effects for non-default face draw. :face_fade => true, # Makes face to be fading when start message. :face_move => true, # Makes face to be moving in when start message. # Bubble tag settings. :bubble_tag => true, # Enables bubble tag for pop message. :bubble_name => "BubbleTag", # Put bubble tag image into # Graphics/System :bubble_offset_y => -6, } # End. end end #============================================================================== # ¥ Editting anything past this point may potentially result in causing # computer damage, incontinence, explosion of user's head, coma, death, and/or # halitosis so edit at your own risk. #============================================================================== #============================================================================== # ¡ Window_MessageFace #============================================================================== class Window_MessageFace < Window_Base #-------------------------------------------------------------------------- # initialize #-------------------------------------------------------------------------- def initialize super(0, 0, 120, 120) self.opacity = 0 self.contents_opacity = 0 self.close @move_x = 0 end #-------------------------------------------------------------------------- # draw_content_face #-------------------------------------------------------------------------- def draw_content_face if $game_message.face_name.empty? hide_face else self.y = - self.height contents.clear draw_face($game_message.face_name, $game_message.face_index, 0, 0) end end #-------------------------------------------------------------------------- # fade_time #-------------------------------------------------------------------------- def fade_time 17 end #-------------------------------------------------------------------------- # move_time #-------------------------------------------------------------------------- def move_time 17 end #-------------------------------------------------------------------------- # move_rate #-------------------------------------------------------------------------- def move_rate 2 end #-------------------------------------------------------------------------- # show_face #-------------------------------------------------------------------------- def show_face return if $game_message.face_name.empty? self.open #--- if (YES::POP_MESSAGE::EFFECT_SETTING[:face_fade] || YES::POP_MESSAGE::EFFECT_SETTING[:face_move]) self.openness = 255 end #--- if YES::POP_MESSAGE::EFFECT_SETTING[:face_fade] self.contents_opacity = 0 else self.contents_opacity = 255 end #--- if YES::POP_MESSAGE::EFFECT_SETTING[:face_move] @move_x = move_time * move_rate self.x -= @move_x end end #-------------------------------------------------------------------------- # hide_face #-------------------------------------------------------------------------- def hide_face close end #-------------------------------------------------------------------------- # update #-------------------------------------------------------------------------- def update super #--- self.contents_opacity += 255.0 / fade_time #--- if @move_x > 0 rate = [move_rate, @move_x].min @move_x -= rate self.x += rate end end end # Window_MessageFace #============================================================================== # ¡ Window_Message #============================================================================== class Window_Message < Window_Base #-------------------------------------------------------------------------- # new method: pop_message_initialize #-------------------------------------------------------------------------- def pop_message_initialize(text) if text =~ /\\BM\[(\d+)\]/i setup_pop_message($1.to_i) end if text =~ /\\CBM/i cancel_pop_message end if text =~ /\\CBT\[(.*)\]/i create_bubble_sprite($1) @bubble_sprite.opacity = 255 end end #-------------------------------------------------------------------------- # new method: process_pop_message #-------------------------------------------------------------------------- def process_pop_message(text) text.gsub!(/\eCBT\[(.*)\]/i) { "" } text.gsub!(/\eBM\[(\d+)\]/i) { "" } text.gsub!(/\eCBM/i) { "" } text end #-------------------------------------------------------------------------- # alias method: convert_escape_characters #-------------------------------------------------------------------------- alias yes_pm_convert_escape_characters convert_escape_characters def convert_escape_characters(text) result = yes_pm_convert_escape_characters(text) result = process_pop_message(result) result end #-------------------------------------------------------------------------- # new method: setup_pop_message #-------------------------------------------------------------------------- def setup_pop_message(id) create_bubble_sprite adjust_window_size adjust_window_position(id) @bubble_sprite.opacity = 255 end #-------------------------------------------------------------------------- # new method: create_bubble_sprite #-------------------------------------------------------------------------- def create_bubble_sprite(filename = nil) return unless YES::POP_MESSAGE::EFFECT_SETTING[:bubble_tag] filename = YES::POP_MESSAGE::EFFECT_SETTING[:bubble_name] unless filename bitmap = Cache.system(filename) @bubble_sprite ||= Sprite.new @bubble_sprite.z = self.z @bubble_sprite.opacity = 0 @bubble_sprite.bitmap = bitmap @bubble_sprite.src_rect.set(0, 0, bitmap.width, bitmap.height / 2) end #-------------------------------------------------------------------------- # new method: adjust_window_position #-------------------------------------------------------------------------- def adjust_window_position(id) hash = $game_map.events character = id <= 0 ? $game_player : hash[id] #--- bitmap = Cache.character(character.character_name) sign = character.character_name[/^[\!\$]./] if sign && sign.include?('$') ch = bitmap.height / 4 else ch = bitmap.height / 8 end #--- self.x = character.screen_x - self.width / 2 self.y = character.screen_y - self.height - ch if @bubble_sprite @bubble_sprite.x = character.screen_x - @bubble_sprite.width / 2 @bubble_sprite.y = self.y + self.height @bubble_sprite.y += YES::POP_MESSAGE::EFFECT_SETTING[:bubble_offset_y] end #--- end_x = self.x + self.width self.x = 0 if self.x < 0 self.x = Graphics.width - self.width if end_x > Graphics.width if self.y < 0 self.y = character.screen_y if @bubble_sprite @bubble_sprite.y = self.y - @bubble_sprite.height @bubble_sprite.y -= YES::POP_MESSAGE::EFFECT_SETTING[:bubble_offset_y] @bubble_sprite.src_rect.set(0, @bubble_sprite.height, @bubble_sprite.width, @bubble_sprite.height) end end end #-------------------------------------------------------------------------- # new method: adjust_window_size #-------------------------------------------------------------------------- def adjust_window_size text = convert_escape_characters($game_message.all_text) #--- width = cal_width_line(text) + standard_padding * 2 width = width + new_line_x if YES::POP_MESSAGE::LIMIT_SETTING[:width] > 0 width = [YES::POP_MESSAGE::LIMIT_SETTING[:width], width] end #--- lines = cal_number_line(text) if YES::POP_MESSAGE::LIMIT_SETTING[:lines] > 0 lines = [YES::POP_MESSAGE::LIMIT_SETTING[:lines], lines].min end if YES::POP_MESSAGE::EFFECT_SETTING[:default_face] unless $game_message.face_name.empty? lines = [4, lines].max end end #--- self.width = width self.height = fitting_height(lines) create_contents end #-------------------------------------------------------------------------- # new method: cal_number_line #-------------------------------------------------------------------------- def cal_number_line(text) result = 0 text.each_line { result += 1 } return result end #-------------------------------------------------------------------------- # new method: cal_width_line #-------------------------------------------------------------------------- def cal_width_line(text) result = 0 text.each_line { |line| result = text_size(line).width if result < text_size(line).width } return result end #-------------------------------------------------------------------------- # new method: cancel_pop_message #-------------------------------------------------------------------------- def cancel_pop_message update_placement reset_size create_bubble_sprite end #-------------------------------------------------------------------------- # new method: reset_size #-------------------------------------------------------------------------- def reset_size self.width = window_width self.height = window_height update_padding create_contents end #-------------------------------------------------------------------------- # alias method: draw_face #-------------------------------------------------------------------------- alias yes_pop_message_draw_face draw_face def draw_face(face_name, face_index, x, y, enabled = true) return unless YES::POP_MESSAGE::EFFECT_SETTING[:default_face] yes_pop_message_draw_face(face_name, face_index, x, y, enabled) end #-------------------------------------------------------------------------- # alias method: update_placement #-------------------------------------------------------------------------- alias yes_pop_message_update_placement update_placement def update_placement yes_pop_message_update_placement self.x = 0 end #-------------------------------------------------------------------------- # alias method: process_all_text #-------------------------------------------------------------------------- alias yes_pop_message_process_all_text process_all_text def process_all_text pop_message_initialize($game_message.all_text) yes_pop_message_process_all_text end #-------------------------------------------------------------------------- # alias method: open_and_wait #-------------------------------------------------------------------------- alias yes_pop_message_open_and_wait open_and_wait def open_and_wait yes_pop_message_open_and_wait @face_window ||= Window_MessageFace.new @face_window.draw_content_face @face_window.x = self.x + 8 @face_window.y += self.y + self.height @face_window.show_face end #-------------------------------------------------------------------------- # alias method: close_and_wait #-------------------------------------------------------------------------- alias yes_pop_message_close_and_wait close_and_wait def close_and_wait @face_window.hide_face @bubble_sprite.opacity = 0 if @bubble_sprite yes_pop_message_close_and_wait cancel_pop_message end #-------------------------------------------------------------------------- # alias method: update #-------------------------------------------------------------------------- alias yes_pop_message_update update def update yes_pop_message_update if @face_window @face_window.update @face_window.z = self.z end if @bubble_sprite @bubble_sprite.update @bubble_sprite.z = self.z end end def adjust_message_window_size start_name_window end end # Window_Message #============================================================================== # ¡ Window_NameMessage #============================================================================== if $imported["YEA-MessageSystem"] class Window_NameMessage < Window_Base #-------------------------------------------------------------------------- # set_x_position #-------------------------------------------------------------------------- alias yes_pm_set_x_position set_x_position def set_x_position(x_position) yes_pm_set_x_position(x_position) self.x += @message_window.new_line_x if x_position == 1 self.z = @message_window.z end end # Window_NameMessage end

И вот проблема:
ВНИМАНИЕ: Спойлер!

Портрет персонажа в сообщении не исчезает при вызова меню.

Может кто-то помочь? Заранее спасибо.

Делай так, как подсказывает сердце, а об остальном пускай заботятся другие.
Последнее редактирование: 11 года 4 мес. назад пользователем Eokati.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Даритель Стимкея Проект месяца 2 место 1 место в Готв 3 место Готв 3 место Ветеран
Больше
11 года 4 мес. назад - 11 года 4 мес. назад #77090 от MaltonTheWarrior
А с Yami Engine Ace - Pop Message в чем проблема?

И сам скрипт вставляй с помощью этой штуки, читать удобней будет
Последнее редактирование: 11 года 4 мес. назад пользователем MaltonTheWarrior.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект года 2 место Проект месяца 1 место Проект месяца 3 место
Больше
11 года 4 мес. назад - 11 года 4 мес. назад #77091 от Eokati
Eokati ответил в теме Помощь со скриптом

MaltonTheWarrior пишет: А с Yami Engine Ace - Pop Message в чем проблема?

И сам скрипт вставляй с помощью этой штуки, читать удобней будет

Прости не правильно вопрос поставил. Я использую эти 3 скрипта и использование их одновременно приводит к ошибке.

Делай так, как подсказывает сердце, а об остальном пускай заботятся другие.
Последнее редактирование: 11 года 4 мес. назад пользователем Eokati.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Коммерсант Проект года 1 место Учитель Проект месяца 1 место
Больше
11 года 4 мес. назад #77092 от Iren_Rin
Iren_Rin ответил в теме Помощь со скриптом
Попробуй в класс Window_Message добавить метод dispose следующего содежания
Code:
def dispose @face_window.dispose if @face_window super end

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект года 2 место Проект месяца 1 место Проект месяца 3 место
Больше
11 года 4 мес. назад - 11 года 4 мес. назад #77093 от Eokati
Eokati ответил в теме Помощь со скриптом

Iren_Rin пишет: Попробуй в класс Window_Message добавить метод dispose следующего содежания

Code:
def dispose @face_window.dispose if @face_window super end

Почти идеально. Но есть маленькое но.
Портрет пропадает а табличка с именем (код \n<x> скрипта Yanfly Engine Ace - Ace Message System) теперь остается.

Или точнее проблема поменялась. Портрет пропадает а табличка остается.
Вот:
ВНИМАНИЕ: Спойлер!

Делай так, как подсказывает сердце, а об остальном пускай заботятся другие.
Последнее редактирование: 11 года 4 мес. назад пользователем Eokati.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Коммерсант Проект года 1 место Учитель Проект месяца 1 место
Больше
11 года 4 мес. назад - 11 года 4 мес. назад #77095 от Iren_Rin
Iren_Rin ответил в теме Помощь со скриптом
В последнем скрипте (Yami Engine Ace - Pop Message) в класс Window_Message добавь это
Code:
alias yes_pm_dispose_all_windows dispose_all_windows def dispose_all_windows @face_window.dispose if @face_window yes_pm_dispose_all_windows end
и удали тот код, что я советовал добавить в предыдущем посте
Последнее редактирование: 11 года 4 мес. назад пользователем Iren_Rin.
Спасибо сказали: I_LORD, Eokati

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект года 2 место Проект месяца 1 место Проект месяца 3 место
Больше
11 года 4 мес. назад #77096 от Eokati
Eokati ответил в теме Помощь со скриптом

Iren_Rin пишет: В последнем скрипте (Yami Engine Ace - Pop Message) в класс Window_Message добавь это

Code:
alias yes_pm_dispose_all_windows dispose_all_windows def dispose_all_windows @face_window.dispose if @face_window yes_pm_dispose_all_windows end
и удали тот код, что я советовал добавить в предыдущем посте

Круто! Все работает. Большое спасибо.

Делай так, как подсказывает сердце, а об остальном пускай заботятся другие.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.101 секунд
Работает на Kunena форум