| 
 
| 赞 | 0 |  
| VIP | 0 |  
| 好人卡 | 0 |  
| 积分 | 1 |  
| 经验 | 1428 |  
| 最后登录 | 2019-1-27 |  
| 在线时间 | 12 小时 |  
 Lv1.梦旅人 
	梦石0 星屑60 在线时间12 小时注册时间2017-1-20帖子7 | 
| 
x
加入我们,或者,欢迎回来。您需要 登录 才可以下载或查看,没有帐号?注册会员  RT!
 
 原帖:https://rpg.blue/forum.php?mod=viewthread&tid=396848
 
 使用了RaidenInfinity桑提供的方法进行修复但仍然出现控制符计算误差导致出现空格的情况x
 
 跪求各位大神指教!{:2_271:}
 
 脚本:
 #==============================================================================
 #
 # ¥ Yami Engine Ace - Pop Message
 # -- Last Updated: 2012.06.07
 # -- Level: Normal
 # -- Requires: n/a
 #
 #==============================================================================
 
 $imported = {} if $imported.nil?
 $imported["YSE-PopMessage"] = true
 
 #==============================================================================
 # ¥ Updates
 # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 # 2012.06.07 - Fixed Compatible: YEA - Ace Message System.
 # 2012.05.11 - Fixed Message Position.
 #            - Remove Requirement: YSE - Fix Events Order.
 # 2012.05.07 - Fixed Face position.
 #            - Added Requirement: YSE - Fix Events Order.
 # 2012.04.06 - You can change Bubble Tag filename.
 # 2012.03.28 - Fixed Default Message Position and Sizes.
 # 2012.03.27 - Fixed Default Message.
 # 2012.03.27 - Added Bubble Tag.
 # 2012.03.25 - Fixed Escape Message.
 # 2012.03.24 - Fixed Battle Message.
 # 2012.03.24 - Rewrote script.
 #
 #==============================================================================
 # ¥ Instructions
 # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 # To install this script, open up your script editor and copy/paste this script
 # to an open slot below ¥ Materials/‘fÞ but above ¥ Main. Remember to save.
 #
 # -----------------------------------------------------------------------------
 # Message Window text Codes - These go inside of your message window.
 # -----------------------------------------------------------------------------
 #  Position:   Effect:
 #    \bm[x]    - Sets Message Window position to event x. *Note
 #    \cbm      - Cancel bubble message.
 #
 #              *Note: Set to 0 to sets position to Game Player.
 #
 #==============================================================================
 # ¥ 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 YSE
 module POP_MESSAGE
 
 #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 # - Visual Settings -
 #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 LIMIT = { # Start.
 :limit_width    =>  0,  # Set to 0 to disable limit.
 :limit_line     =>  6,  # Set to 0 to disable limit.
 } # End.
 
 POSITION = { # Start.
 :x_buffer       =>  0,
 :y_buffer       =>  -36,
 :face_x_buffer  =>  8,
 :face_y_buffer  =>  24,
 :tag_y_buffer   =>  -6,
 :name_x_buffer  =>  112, # Require YEA - Message System.
 } # End.
 
 EFFECT = { # Start.
 :fade_face       =>  true,
 :move_face       =>  true,
 :use_bubble_tag  =>  true,
 :bubble_tag_name => "BubbleTag",
 } # 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.
 #==============================================================================
 
 #==============================================================================
 # ¡ Spriteset_Map
 #==============================================================================
 
 class Spriteset_Map
 
 #--------------------------------------------------------------------------
 # public instance variables
 #--------------------------------------------------------------------------
 attr_accessor :character_sprites
 
 end # Spriteset_Map
 
 #==============================================================================
 # ¡ Window_Message_Face
 #==============================================================================
 
 class Window_Message_Face < Window_Base
 
 #--------------------------------------------------------------------------
 # initialize
 #--------------------------------------------------------------------------
 def initialize
 super(0, 0, 120, 120)
 self.opacity = 0
 @face_name = ""
 @face_index = 0
 @move_x = 0
 close
 end
 
 #--------------------------------------------------------------------------
 # message_window=
 #--------------------------------------------------------------------------
 def message_window=(window)
 @message_window = window
 end
 
 #--------------------------------------------------------------------------
 # set_face
 #--------------------------------------------------------------------------
 def set_face
 contents.clear
 return unless @message_window
 if !$game_message.face_name.empty?
 draw_face($game_message.face_name, $game_message.face_index, 0, 0)
 set_position
 show_face
 else
 hide_face
 end
 end
 
 #--------------------------------------------------------------------------
 # set_position
 #--------------------------------------------------------------------------
 def set_position
 return unless @message_window
 self.x = @message_window.x
 self.y = @message_window.y - 96
 self.x += YSE::POP_MESSAGE::POSITION[:face_x_buffer]
 self.y += YSE::POP_MESSAGE::POSITION[:face_y_buffer]
 self.y += (@message_window.real_lines - 1) * 24
 self.z = @message_window.z + 1
 if (@face_name != $game_message.face_name || @face_index != $game_message.face_index)
 if YSE::POP_MESSAGE::EFFECT[:move_face]
 @move_x = 30
 self.x -= 30
 end
 @face_name = $game_message.face_name
 @face_index = $game_message.face_index
 self.contents_opacity = 0 if YSE::POP_MESSAGE::EFFECT[:fade_face]
 end
 end
 
 #--------------------------------------------------------------------------
 # show_face
 #--------------------------------------------------------------------------
 def show_face
 open
 end
 
 #--------------------------------------------------------------------------
 # hide_face
 #--------------------------------------------------------------------------
 def hide_face
 contents.clear
 close
 end
 
 #--------------------------------------------------------------------------
 # update
 #--------------------------------------------------------------------------
 def update
 super
 self.contents_opacity += 15 if self.contents_opacity < 255
 unless @move_x <= 0
 self.x += 2
 @move_x -= 2
 end
 end
 
 end # Sprite_Message_Face
 
 #==============================================================================
 # ¡ Window_Message
 #==============================================================================
 
 class Window_Message < Window_Base
 
 #--------------------------------------------------------------------------
 # new method: face_window=
 #--------------------------------------------------------------------------
 def face_window=(window)
 @face_window = window
 end
 
 #--------------------------------------------------------------------------
 # new method: bubble_tag=
 #--------------------------------------------------------------------------
 def bubble_tag=(sprite)
 @bubble_tag = sprite
 end
 
 #--------------------------------------------------------------------------
 # new method: message_escape_characters_pop_message
 #--------------------------------------------------------------------------
 def message_escape_characters_pop_message(result)
 result.gsub!(/\eBM\[(\d+)\]/i) { event_pop_message_setup($1.to_i, false) }
 result.gsub!(/\eBMF\[(\d+)\]/i) { event_pop_message_setup($1.to_i, true) }
 result.gsub!(/\eCBM/i) { event_pop_message_setup(nil, false) }
 result
 end
 
 #--------------------------------------------------------------------------
 # alias method: convert_escape_characters
 #--------------------------------------------------------------------------
 alias yse_convert_escape_characters_pm convert_escape_characters
 def convert_escape_characters(text)
 result = yse_convert_escape_characters_pm(text)
 result = message_escape_characters_pop_message(result)
 result
 end
 
 #--------------------------------------------------------------------------
 # new method: event_pop_message_setup
 #--------------------------------------------------------------------------
 def event_pop_message_setup(event_id, follower = false)
 if follower && $game_player.followers[event_id].nil?
 @event_pop_id = nil
 @event_pop_follower = false
 return ""
 end
 @event_pop_follower = follower
 @event_pop_id = event_id
 return ""
 end
 
 #--------------------------------------------------------------------------
 # new method: set_face_position
 #--------------------------------------------------------------------------
 def set_face_position
 return unless SceneManager.scene_is?(Scene_Map)
 return unless @event_pop_id
 return unless @face_window
 contents.clear
 @face_window.set_face
 return unless $imported["YEA-MessageSystem"]
 return if @face_window.close?
 #@name_window.x = self.x + YSE::POP_MESSAGE::POSITION[:face_x_buffer] + YSE::POP_MESSAGE::POSITION[:name_x_buffer] if (@name_position == 1 || @name_position == 2)
 end
 
 #--------------------------------------------------------------------------
 # alias method: new_page
 #--------------------------------------------------------------------------
 alias window_message_new_page_pm_yse new_page
 def new_page(text, pos)
 window_message_new_page_pm_yse(text, pos)
 set_face_position
 end
 
 #--------------------------------------------------------------------------
 # alias method: close
 #--------------------------------------------------------------------------
 alias pop_message_close close
 def close
 pop_message_close
 return unless SceneManager.scene_is?(Scene_Map)
 return unless @event_pop_id
 @event_pop_id = nil
 @event_pop_follower = false
 @face_window.hide_face
 return unless YSE::POP_MESSAGE::EFFECT[:use_bubble_tag]
 @bubble_tag.visible = false if @bubble_tag
 end
 
 #--------------------------------------------------------------------------
 # alias method: open_and_wait
 #--------------------------------------------------------------------------
 alias pop_message_open_and_wait open_and_wait
 def open_and_wait
 pop_message_open_and_wait
 return unless YSE::POP_MESSAGE::EFFECT[:use_bubble_tag]
 @bubble_tag.visible = true if @event_pop_id && @bubble_tag
 end
 
 #--------------------------------------------------------------------------
 # alias method: process_all_text
 #--------------------------------------------------------------------------
 alias pop_message_process_all_text process_all_text
 def process_all_text
 @event_pop_id = nil
 convert_escape_characters($game_message.all_text)
 update_placement
 adjust_pop_message($game_message.all_text)
 pop_message_process_all_text
 end
 
 #--------------------------------------------------------------------------
 # alias method: update_placement
 #--------------------------------------------------------------------------
 alias event_pop_message_update_placement update_placement
 def update_placement
 if SceneManager.scene_is?(Scene_Map)
 if @event_pop_id.nil?
 fix_default_message
 event_pop_message_update_placement
 elsif @event_pop_id == 0
 character = $game_player
 self.y = character.screen_y - self.height + YSE::POP_MESSAGE::POSITION[:y_buffer]
 self.x = character.screen_x - self.width / 2 + YSE::POP_MESSAGE::POSITION[:x_buffer]
 fix_position_bubble(character)
 set_bubble_tag(character)
 elsif @event_pop_id > 0
 hash = @event_pop_follower ? $game_player.followers : $game_map.events
 character = hash[@event_pop_id]
 self.y = character.screen_y - self.height + YSE::POP_MESSAGE::POSITION[:y_buffer]
 self.x = character.screen_x - self.width / 2 + YSE::POP_MESSAGE::POSITION[:x_buffer]
 fix_position_bubble(character)
 set_bubble_tag(character)
 end
 else
 event_pop_message_update_placement
 end
 end
 
 #--------------------------------------------------------------------------
 # new method: fix_default_message
 #--------------------------------------------------------------------------
 def fix_default_message
 self.width = window_width
 self.height = window_height
 self.x = 0
 @face_window.hide_face if @face_window
 create_contents
 return unless YSE::POP_MESSAGE::EFFECT[:use_bubble_tag]
 @bubble_tag.visible = false if @bubble_tag
 end
 
 #--------------------------------------------------------------------------
 # new method: fix_position_bubble
 #--------------------------------------------------------------------------
 def fix_position_bubble(character)
 end_x = self.x + self.width
 end_y = self.y + self.height
 self.x = 0 if self.x < 0
 self.y = character.screen_y if self.y < 0
 self.x = Graphics.width - self.width if end_x > Graphics.width
 self.y = Graphics.height - self.height if end_y > Graphics.height
 end
 
 #--------------------------------------------------------------------------
 # new method: set_bubble_tag
 #--------------------------------------------------------------------------
 def set_bubble_tag(character)
 return unless YSE::POP_MESSAGE::EFFECT[:use_bubble_tag]
 return unless @bubble_tag
 up = self.y == character.screen_y
 self.y += up ? @bubble_tag.height / 2 : -@bubble_tag.height / 2
 @bubble_tag.x = character.screen_x - @bubble_tag.width / 2
 if up
 @bubble_tag.src_rect.set(0, @bubble_tag.height, @bubble_tag.width, @bubble_tag.height)
 @bubble_tag.y = self.y - @bubble_tag.height - YSE::POP_MESSAGE::POSITION[:tag_y_buffer]
 else
 @bubble_tag.src_rect.set(0, 0, @bubble_tag.width, @bubble_tag.height)
 @bubble_tag.y = self.y + self.height + YSE::POP_MESSAGE::POSITION[:tag_y_buffer]
 end
 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
 
 #--------------------------------------------------------------------------
 # alias method: adjust_message_window_size
 #--------------------------------------------------------------------------
 if $imported["YEA-MessageSystem"]
 alias yse_pop_message_adjust_message_window_size adjust_message_window_size
 def adjust_message_window_size
 start_name_window if @event_pop_id
 return if @event_pop_id
 yse_pop_message_adjust_message_window_size
 end
 end
 
 #--------------------------------------------------------------------------
 # new method: adjust_pop_message
 #--------------------------------------------------------------------------
 def adjust_pop_message(text = " ")
 return unless SceneManager.scene_is?(Scene_Map)
 unless @event_pop_id
 if $imported["YEA-MessageSystem"]
 #adjust_message_window_size
 end
 return
 end
 text.gsub!(/\\\w*\[\w\]|\n/i,'')
 n_line = cal_number_line(text)
 n_line = YSE::POP_MESSAGE::LIMIT[:limit_line] if YSE::POP_MESSAGE::LIMIT[:limit_line] > 0 && cal_number_line(text) > YSE::POP_MESSAGE::LIMIT[:limit_line]
 @real_lines = n_line
 self.height = fitting_height(n_line)
 self.width = cal_width_line(text) + 24
 self.width += new_line_x
 if self.width > YSE::POP_MESSAGE::LIMIT[:limit_width] && YSE::POP_MESSAGE::LIMIT[:limit_width] > 0
 self.width = YSE::POP_MESSAGE::LIMIT[:limit_width]
 end
 create_contents
 update_placement
 end
 
 #--------------------------------------------------------------------------
 # overwrite method: new_line_x
 #--------------------------------------------------------------------------
 def new_line_x
 if $game_message.face_name.empty?
 return 0
 else
 result = YSE::POP_MESSAGE::POSITION[:face_x_buffer]
 p_x = $imported["YEA-MessageSystem"] ? YEA::MESSAGE::FACE_INDENT_X : 112
 result += p_x
 return result
 end
 end
 
 #--------------------------------------------------------------------------
 # new method: real_lines
 #--------------------------------------------------------------------------
 def real_lines
 @real_lines
 end
 
 end # Window_Message
 
 #==============================================================================
 # ¡ Scene_Map
 #==============================================================================
 
 class Scene_Map < Scene_Base
 
 #--------------------------------------------------------------------------
 # alias method: create_message_window
 #--------------------------------------------------------------------------
 alias yse_pm_create_message_window create_message_window
 def create_message_window
 yse_pm_create_message_window
 @face_window = Window_Message_Face.new
 @face_window.message_window = @message_window
 if YSE::POP_MESSAGE::EFFECT[:use_bubble_tag]
 @bubble_tag_sprite = Sprite.new
 @bubble_tag_sprite.visible = false
 @bubble_tag_sprite.bitmap = Cache.system(YSE::POP_MESSAGE::EFFECT[:bubble_tag_name])
 @bubble_tag_sprite.src_rect.set(0, 0, @bubble_tag_sprite.width, @bubble_tag_sprite.height / 2)
 @message_window.bubble_tag = @bubble_tag_sprite
 end
 @message_window.face_window = @face_window
 end
 
 #--------------------------------------------------------------------------
 # alias method: dispose_spriteset
 #--------------------------------------------------------------------------
 alias pop_message_dispose_spriteset dispose_spriteset
 def dispose_spriteset
 pop_message_dispose_spriteset
 return unless @bubble_tag_sprite
 @bubble_tag_sprite.dispose
 end
 
 end # Scene_Map
 
 #==============================================================================
 #
 # ¥ End of File
 #
 #==============================================================================
 
 | 
 |