Project1
标题:
文字拡張功能
[打印本页]
作者:
tseyik
时间:
2012-3-1 17:23
标题:
文字拡張功能
本帖最后由 tseyik 于 2012-3-4 13:10 编辑
原出處
http://rmrk.net/index.php/topic,44810.0.html
RM在文本模式可用不同指令加上不同效果(如顔色、icon)
這個脚本就是把這指令拡張到其他地方
这个脚本允许你使用特殊的信息代码,在任何一个窗口,而不仅仅是信息窗口和帮助窗口。要添加一个图标旁边的菜单命令?这个脚本,你可以做的多。
注:
在文本中使用特殊的消息代码,将让这个文本将不会自動收缩,如果超出其指定的宽度。可能會不正常顕示。
使用方法
只要在指令前面加上\*
如\c[5]Hand Axe\c[0]; 改成 \*\c[5]Hand Axe\c[0]
効果
#==============================================================================
# Global Text Codes [VXA]
# Version: 1.0
# Author: modern algebra (rmrk.net)
# Date: January 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 => "",
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# 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 not 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_rect
@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
复制代码
作者:
xuzhengchi
时间:
2012-3-1 18:22
感谢LZ~刚还在吐槽物品颜色脚本有冲突神马的,呵呵
作者:
tang19990919
时间:
2012-3-1 21:40
这是VX的还是XP的还是2000的还是ACE的?...
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1