| 赞 | 168  | 
 
| VIP | 6 | 
 
| 好人卡 | 208 | 
 
| 积分 | 225 | 
 
| 经验 | 137153 | 
 
| 最后登录 | 2025-4-1 | 
 
| 在线时间 | 8598 小时 | 
 
 
 
 
 
Lv5.捕梦者 
	- 梦石
 - 0 
 
        - 星屑
 - 22509 
 
        - 在线时间
 - 8598 小时
 
        - 注册时间
 - 2011-12-31
 
        - 帖子
 - 3361
 
 
 
 | 
	
RM在文本模式可用不同指令加上不同效果(如顔色、icon) 
這個脚本就是把這指令拡張到其他地方 
这个脚本允许你使用特殊的信息代码,在任何一个窗口,而不仅仅是信息窗口和帮助窗口。要添加一个图标旁边的菜单命令?这个脚本,你可以做的多。 
 
版本歷程記錄 
 
    < 版本 1.0 a > 2012.04.05-修正替換代碼的問題 
    < 1.0 > 2012.01.05-原始版本- #==============================================================================
 
 - #    Global Text Codes [VXA]
 
 - #    Version: 1.0a
 
 - #    Author: modern algebra (rmrk.net)
 
 - #    Date: April 5, 2012
 
 - #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 - #  Description:
 
 - #
 
 - #    This script allows you to use special message codes in any window, not
 
 - #   just message windows and help windows. Want to add an icon next to the
 
 - #   menu commands? With this script you can do that and more.
 
 - #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 - #  Instructions:
 
 - #
 
 - #    Simply paste this script into its own slot above Main and below Materials
 
 - #   and other custom scripts.
 
 - #
 
 - #    There are two settings for this script - automatic and manual. If set to
 
 - #   automatic, then all you will need to do is put any of the special message
 
 - #   codes in anything and they will automatically work. If set to manual, then
 
 - #   you will also need to type the following code somewhere in the text field
 
 - #   to activate it: \*
 
 - #
 
 - #    The following default codes are available:
 
 - #
 
 - # \c[n] - Set the colour of the text being drawn to the nth colour of the
 
 - #     Windowskin palette. 0 is the normal color and 16 is the system color.
 
 - # \i[n] - Draw icon with index n.
 
 - # \p[n] - Draw the name of the actor in the xth position in the party. 1 is
 
 - #     the party leader, 2 is the second member, etc.
 
 - # \n[n] - Draw the name of the actor with ID n
 
 - # \v[n] - Draw the value of variable with ID n.
 
 - # \g - Draws the unit of currency.
 
 - #
 
 - #    Depending on whether you are using any custom message script, you may have
 
 - #   additional message codes at your disposal. This script is mostly compatible
 
 - #   with my ATS and every code except \x and ones related to message control
 
 - #   will work.
 
 - #==============================================================================
 
  
- $imported = {} unless $imported
 
 - $imported[:MAGlobalTextCodes] = true
 
 - #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 
 - #  Editable Region
 
 - #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 
 - #  MAGTC_MANUAL_CODES - If this is true, then you must put a \* code in any
 
 - # field that you want to have codes interpreted in. Otherwise, codes will
 
 - # always automatically be interpreted. The recommended value for this is true,
 
 - # as the process for drawing text with codes is much slower than the process
 
 - # for drawing text without codes.
 
 - MAGTC_MANUAL_CODES = true
 
 - #  MAGTC RCODES - This feature is designed to overcome the space limitations in
 
 - # much of the database - since codes take so much of that space, it might be
 
 - # difficult to write everything you want into one of those fields. This feature
 
 - # permits you to write the term you want in to the following array, and then
 
 - # access it in the database with the code \r[n], where n is the ID you assign
 
 - # to the phrase in the following way:
 
 - #
 
 - #    n => "replacement",
 
 - #
 
 - # Please note that: it is =>, not =; the replacement must be within quotation
 
 - # marks; and there must be a comma after every line. If using double quotation
 
 - # marks ("", not ''), then you need to use two backslashes to access codes
 
 - # instead of one (\\c[1], not \c[1]).
 
 - #
 
 - #  EXAMPLE:
 
 - #   0 => "\\i[112]\\c[14]New Game\\c[0]",
 
 - #
 
 - #  Under the New Game field in the Terms of the Database, all I would then need
 
 - # to put is:
 
 - #    \*\r[0]
 
 - #  and it would be the same as if I had put:
 
 - #    \*\i[112]\c[14]New Game\c[0]
 
 - MAGTC_RCODES = { # <- Do not touch
 
 -   0 => "\\i[112]\\c[14]New Game\\c[0]", # Example
 
 -   1 => "", # You can make as many of these as you want
 
 -   2 => "\\i[40]Blood Hound",
 
 - #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 
 - #  END Editable Region
 
 - #//////////////////////////////////////////////////////////////////////////////
 
 - }
 
 - MAGTC_RCODES.default = ""
 
  
- #==============================================================================
 
 - # ** Window_Base
 
 - #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 - #  Summary of Changes:
 
 - #    aliased methods - draw_text; convert_escape_characters; process_new_line;
 
 - #      reset_font_settings
 
 - #    new methods - magtc_align_x; magtc_test_process_escape_character;
 
 - #      magtc_calc_line_width
 
 - #==============================================================================
 
  
- class Window_Base
 
 -   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 -   # * Draw Text
 
 -   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 -   alias ma_gtc_drwtxt_3fs1 draw_text
 
 -   def draw_text(*args, &block)
 
 -     # Get the arguments
 
 -     if args[0].is_a?(Rect)
 
 -         x, y, w, h = args[0].x, args[0].y, args[0].width, args[0].height
 
 -         text, align = *args[1, 2]
 
 -       else
 
 -         x, y, w, h, text, align = *args[0, 6]
 
 -       end
 
 -     align = 0 unless align
 
 -     #  Draw normally if text is not a string, draw normally if the text is not
 
 -     # long enough to hold a code, and draw normally when the script is set to
 
 -     # manual and \* is included in the text
 
 -       if !text.is_a?(String) || text.size < 2 || (MAGTC_MANUAL_CODES && text[/\\\*/].nil?)
 
 -         ma_gtc_drwtxt_3fs1(*args, &block) # Run Original Method
 
 -       else
 
 -       @magtc_reset_font = contents.font.dup # Do not automatically reset font
 
 -       @magtc_rect, @magtc_align = Rect.new(x, y, w, h), align
 
 -       # Get first line of the text to test for alignment
 
 -       @magtc_test_line = convert_escape_characters(text[/.*/])
 
 -       y += [(h - calc_line_height(@magtc_test_line)) / 2, 0].max
 
 -       # Draw text with message codes
 
 -         draw_text_ex(magtc_align_x(x), y, text)
 
 -       @magtc_reset_font = nil # Do not automatically reset font
 
 -       @magtc_rect, @magtc_align = nil, nil # Reset Rect and Alignment
 
 -       end
 
 -   end
 
 -   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 -   # * Convert Escape Characters
 
 -   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 -   alias ma_gtc_convescchar_5tk9 convert_escape_characters
 
 -   def convert_escape_characters(text, *args, &block)
 
 -     # Remove \* codes
 
 -     new_text = text.gsub(/\\\*/, "")
 
 -     # Substitute for the R Codes
 
 -     new_text.gsub!(/\\[Rr]\[(\d+)\]/) { MAGTC_RCODES[$1.to_i].to_s }
 
 -     ma_gtc_convescchar_5tk9(new_text, *args, &block) # Call Original Method
 
 -   end
 
 -   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 -   # * Reset Font Settings
 
 -   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 -   alias magtc_resetfonts_4ga5 reset_font_settings
 
 -   def reset_font_settings(*args, &block)
 
 -     magtc_resetfonts_4ga5(*args, &block) # Call Original Method
 
 -     contents.font = @magtc_reset_font if @magtc_reset_font
 
 -   end
 
 -   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 -   # * Process New Line
 
 -   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 -   alias magtc_prcsnewl_5gn9 process_new_line
 
 -   def process_new_line(text, pos, *args, &block)
 
 -     magtc_prcsnewl_5gn9(text, pos, *args, &block) # Run Original Method
 
 -     if @magtc_align && @magtc_rext
 
 -       @magtc_test_line = text[/.*/] # Get new line
 
 -       pos[:x] = magtc_align_x       # Get the correct x, depending on alignment
 
 -     end
 
 -   end
 
 -   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 -   # * Get Alignment X
 
 -   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 -   def magtc_align_x(start_x = @magtc_rect.x)
 
 -     return start_x unless (@magtc_rect && @magtc_align && @magtc_test_line) || @magtc_align != 0
 
 -     tw = magtc_calc_line_width(@magtc_test_line)
 
 -     case @magtc_align
 
 -     when 1 then return start_x + ((@magtc_rect.width - tw) / 2)
 
 -     when 2 then return start_x + (@magtc_rect.width - tw)
 
 -     end
 
 -     start_x
 
 -   end
 
 -   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 -   # * Calc Line Width
 
 -   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 -   def magtc_calc_line_width(line)
 
 -     # Remove all escape codes
 
 -     line = line.clone
 
 -     line.gsub!(/[\n\r\f]/, "")
 
 -     real_contents = contents # Preserve Real Contents
 
 -     # Create a dummy contents
 
 -     self.contents = Bitmap.new(@magtc_rect.width, @magtc_rect.height)
 
 -     reset_font_settings
 
 -     pos = {x: 0, y: 0, new_x: 0, height: calc_line_height(line)}
 
 -     tw = 0
 
 -     while line[/^(.*?)\e(.*)/]
 
 -       tw += text_size($1).width
 
 -       line = $2
 
 -       # Remove all ancillaries to the code, like parameters
 
 -       code = obtain_escape_code(line)
 
 -       magtc_test_process_escape_character(code, line, pos)
 
 -     end
 
 -     #  Add width of remaining text, as well as the value of pos[:x] under the
 
 -     # assumption that any additions to it are because the special code is
 
 -     # replaced by something which requires space (like icons)
 
 -     tw += text_size(line).width + pos[:x]
 
 -     self.contents.dispose # Dispose dummy contents
 
 -     self.contents = real_contents # Restore real contents
 
 -     return tw
 
 -   end
 
 -   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 -   # * Test Process Escape Character
 
 -   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 -   def magtc_test_process_escape_character(code, text, pos)
 
 -     if $imported[:ATS_SpecialMessageCodes] && ['X', 'HL'].include?(code.upcase)
 
 -       obtain_escape_param(text)
 
 -       return
 
 -     end
 
 -     process_escape_character(code, text, pos)
 
 -   end
 
 - end
 
 
  复制代码 |   
 
 
 
 |