设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 21853|回复: 33

[RMVX发布] 半身像对话框功能版 v 1.01 (2008-09-11 更新)

 关闭 [复制链接]

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

发表于 2008-9-1 00:59:57 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
半身像对话框功能版 v 1.01 by 沉影不器

使用说明:
   ① 此脚本可代替默认 Window_Message 全脚本

   ② 对话框第一行输入引号内文字"名称:",脚本会把名称提取出来美化显示

   ③ 默认半身像在左边显示
      当您需要右边显示时,在第一行输入的名称之后加"@r"(大小写不限)
      例: "拉尔夫@r:"
          请注意此时半身像将进行左右翻转显示

   ④ 在对话中更改字体的方法:
       \f[sX]:更改字号为X
       \f[nX]:更改字体名称为预设字体组第X号字体 (预设字体组请看参数设定)
       \f[cX]:更改字色为第X号颜色 (text_color中的定义)

   ⑤ 在对话中显示(技能 物品 武器 防具)图标和名称的方法:
       \s[X]: 显示第X号技能图标和名称
       \i[X]: 显示第X号物品图标和名称
       \w[X]: 显示第X号武器图标和名称
       \a[X]: 显示第X号防具图标和名称

   ⑥ 在对话中更改文字不透明度的方法:
       \o[X]: 把文字不透明度更改为X (取值范围在0~255)

   ⑦ 指定时间后自动关闭对话框的方法:
       \x[X]: 对话框将在X帧后自动关闭
       \x:    省略参数时,将在AUTO_CLOSE帧后自动关闭 (AUTO_CLOSE在参数设定中)

   ⑧ 由于半身像占据文字显示宽度,您在设定文章时每行字数将减少

   ⑨ 参数设定在脚本第37~66行

素材要求:
   ① 按vx默认头像像素材(Graphics\Faces)的格式
      要求所有半身像朝向一致(默认是正面偏右)


  1. #==============================================================================
  2. # 半身像对话框功能版 v 1.01 by 沉影不器
  3. #------------------------------------------------------------------------------
  4. # 使用说明:
  5. #   ① 此脚本可代替默认 Window_Message 全脚本
  6. #
  7. #   ② 对话框第一行输入引号内文字"名称:",脚本会把名称提取出来美化显示
  8. #
  9. #   ③ 默认半身像在左边显示
  10. #      当您需要右边显示时,在第一行输入的名称之后加"@r"(大小写不限)
  11. #      例: "拉尔夫@r:"
  12. #          请注意此时半身像将进行左右翻转显示
  13. #
  14. #   ④ 在对话中更改字体的方法:
  15. #       \f[sX]:更改字号为X
  16. #       \f[nX]:更改字体名称为预设字体组第X号字体 (预设字体组请看参数设定)
  17. #       \f[cX]:更改字色为第X号颜色 (text_color中的定义)
  18. #
  19. #   ⑤ 在对话中显示(技能 物品 武器 防具)图标和名称的方法:
  20. #       \s[X]: 显示第X号技能图标和名称
  21. #       \i[X]: 显示第X号物品图标和名称
  22. #       \w[X]: 显示第X号武器图标和名称
  23. #       \a[X]: 显示第X号防具图标和名称
  24. #
  25. #   ⑥ 在对话中更改文字不透明度的方法:
  26. #       \o[X]: 把文字不透明度更改为X (取值范围在0~255)
  27. #
  28. #   ⑦ 指定时间后自动关闭对话框的方法:
  29. #       \x[X]: 对话框将在X帧后自动关闭
  30. #       \x:    省略参数时,将在AUTO_CLOSE帧后自动关闭 (AUTO_CLOSE在参数设定中)
  31. #
  32. #   ⑧ 由于半身像占据文字显示宽度,您在设定文章时每行字数将减少
  33. #
  34. #   ⑨ 参数设定在脚本第37~66行
  35. #
  36. # 素材要求:
  37. #   ① 按vx默认头像像素材(Graphics\Faces)的格式
  38. #      要求所有半身像朝向一致(默认是正面偏右)
  39. #==============================================================================
  40. # ■ Window_Message
  41. #==============================================================================
  42. class Window_Message < Window_Selectable
  43.   #--------------------------------------------------------------------------
  44.   # ○ 参数设定
  45.   #--------------------------------------------------------------------------
  46.   # 预设字体组
  47.   FONT_ARRAY = ["黑体", "宋体", "仿宋_GB2312"]
  48.   
  49.   # 名称条参数
  50.   NAME_FONT_NAME = 0            # 名称文字字体在预设字体组中的序号
  51.   NAME_FONT_SIZE = 20           # 名称文字字号
  52.   NAME_FONT_COLOR = 16          # 名称文字颜色
  53.   NAME_X_ADJ = 6                # 名称条宽度缩进值
  54.   NAME_Y_ADJ = 6                # 名称与对话内容之间的附加距离
  55.   NAME_BAR_COLOR = 0            # 名称背景条颜色
  56.   NAME_BAR_OPACITY = 72         # 名称背景条透明度
  57.   AUTO_ADD = true               # 是否自动添加名称修饰符
  58.   SYMBOL = "【】"               # AUTO_ADD有效时为名称添加的修饰符(一对)
  59.   # 半身像参数
  60.   FACE_X_ADJ = 6                # 半身像横坐标微调
  61.   FACE_Y_ADJ = -6               # 半身像纵坐标微调
  62.   # 对话框参数
  63.   MSG_FONT_NAME = 1             # 对话文字字体在预设字体组中的序号
  64.   MSG_FONT_SIZE = 18            # 对话文字字号
  65.   MSG_FONT_COLOR = 0            # 对话文字颜色
  66.   # 自动关闭
  67.   AUTO_CLOSE = 80               # 默认自动关闭时间(以帧计时)
  68.   
  69.   #--------------------------------------------------------------------------
  70.   # ● 常量
  71.   #--------------------------------------------------------------------------
  72.   MAX_LINE = 4                            # 最大行数
  73.   #--------------------------------------------------------------------------
  74.   # ◎ 初始化对象
  75.   #--------------------------------------------------------------------------
  76.   def initialize
  77.     height = [NAME_FONT_SIZE, MSG_FONT_SIZE].max + 2 +
  78.              ( MSG_FONT_SIZE + 2) * 3 + NAME_Y_ADJ + 32
  79.     y = Graphics.height - height
  80.     super(0, y, Graphics.width, height)
  81.     self.z = 200
  82.     self.active = false
  83.     self.index = -1
  84.     self.openness = 0
  85.     @opening = false            # 窗口正在打开的标志
  86.     @closing = false            # 窗口正在关闭的标志
  87.     @text = nil                 # 已经没有可显示的文章
  88.     @contents_x = 0             # 下一条文字描绘的 X 坐标
  89.     @contents_y = 0             # 下一条文字描绘的 Y 坐标
  90.     @line_count = 0             # 现在描绘的行数
  91.     @wait_count = 0             # 等待计数
  92.     @background = 0             # 背景类型
  93.     @position = 2               # 显示位置
  94.     @show_fast = false          # 快速显示标志
  95.     @line_show_fast = false     # 以行为单位快速显示
  96.     @pause_skip = false         # 省略等待输入标志
  97.     create_gold_window
  98.     create_number_input_window
  99.     create_back_sprite
  100.     # 半身像左右判断
  101.     @show_right = false
  102.     # 半身像宽度
  103.     @face_width = 0
  104.     # 生成名称背景条
  105.     create_namebar_sprite
  106.     # 生成半身像
  107.     create_face_sprite
  108.     # 修改默认字体
  109.     contents.font = get_font(1)
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● 释放
  113.   #--------------------------------------------------------------------------
  114.   def dispose
  115.     super
  116.     dispose_gold_window
  117.     dispose_number_input_window
  118.     dispose_back_sprite
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ◎ 更新画面
  122.   #--------------------------------------------------------------------------
  123.   def update
  124.     super
  125.     update_gold_window
  126.     update_number_input_window
  127.     update_back_sprite
  128.     update_show_fast
  129.     unless @opening or @closing             # 除窗口关闭以外
  130.       if @wait_count > 0                    # 文章内等待中
  131.         @wait_count -= 1
  132.       elsif self.pause                      # 等待文章翻页待机中
  133.         input_pause
  134.       elsif self.active                     # 正在输入选择项
  135.         input_choice
  136.       elsif @number_input_window.visible    # 正在输入数值
  137.         input_number
  138.       elsif @text != nil                    # 还有剩余的文章
  139.         update_message                        # 更新消息
  140.       elsif continue?                       # 继续的情况
  141.         start_message                         # 开始消息
  142.         open                                  # 打开窗口
  143.         $game_message.visible = true
  144.       else                                  # 不继续的情况
  145.         close                                 # 关闭窗口
  146.         $game_message.visible = @closing
  147.       end
  148.     end
  149.     # 自动关闭对话框
  150.     if @auto_close != nil
  151.       if @auto_close > 0
  152.         @auto_close -= 1
  153.       else
  154.         @auto_close = nil
  155.         terminate_message
  156.       end
  157.     end
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ◎ 生成所持金窗口
  161.   #--------------------------------------------------------------------------
  162.   def create_gold_window
  163.     @gold_window = Window_Gold.new(384, 0)
  164.     @gold_window.openness = 0
  165.     # 统一字体
  166.     @gold_window.contents.font = get_font(1)
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # ◎ 生成数值输入窗口
  170.   #--------------------------------------------------------------------------
  171.   def create_number_input_window
  172.     @number_input_window = Window_NumberInput.new
  173.     @number_input_window.visible = false
  174.     # 统一字体
  175.     @number_input_window.contents.font = get_font(1)
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 生成背景活动块
  179.   #--------------------------------------------------------------------------
  180.   def create_back_sprite
  181.     @back_sprite = Sprite.new
  182.     @back_sprite.bitmap = Cache.system("MessageBack")
  183.     @back_sprite.visible = (@background == 1)
  184.     @back_sprite.z = 190
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● 释放所持金窗口
  188.   #--------------------------------------------------------------------------
  189.   def dispose_gold_window
  190.     @gold_window.dispose
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # ● 释放数值输入窗口
  194.   #--------------------------------------------------------------------------
  195.   def dispose_number_input_window
  196.     @number_input_window.dispose
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● 释放背景活动块
  200.   #--------------------------------------------------------------------------
  201.   def dispose_back_sprite
  202.     @back_sprite.dispose
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ● 更新所持金窗口
  206.   #--------------------------------------------------------------------------
  207.   def update_gold_window
  208.     @gold_window.update
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ● 更新数值输入窗口
  212.   #--------------------------------------------------------------------------
  213.   def update_number_input_window
  214.     @number_input_window.update
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # ● 更新背景活动块
  218.   #--------------------------------------------------------------------------
  219.   def update_back_sprite
  220.     @back_sprite.visible = (@background == 1)
  221.     @back_sprite.y = y - 16
  222.     @back_sprite.opacity = openness
  223.     @back_sprite.update
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ● 更新快速显示标志
  227.   #--------------------------------------------------------------------------
  228.   def update_show_fast
  229.     if self.pause or self.openness < 255
  230.       @show_fast = false
  231.     elsif Input.trigger?(Input::C) and @wait_count < 2
  232.       @show_fast = true
  233.     elsif not Input.press?(Input::C)
  234.       @show_fast = false
  235.     end
  236.     if @show_fast and @wait_count > 0
  237.       @wait_count -= 1
  238.     end
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ● 判断下一消息继续显示
  242.   #--------------------------------------------------------------------------
  243.   def continue?
  244.     return true if $game_message.num_input_variable_id > 0
  245.     return false if $game_message.texts.empty?
  246.     if self.openness > 0 and not $game_temp.in_battle
  247.       return false if @background != $game_message.background
  248.       return false if @position != $game_message.position
  249.     end
  250.     return true
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # ◎ 开始显示消息
  254.   #--------------------------------------------------------------------------
  255.   def start_message
  256.     # 重设窗口背景与位置
  257.     reset_window
  258.     # 还原半身像左右判断
  259.     @show_right = false
  260.     # 暂存消息
  261.     temp_texts = []
  262.     $game_message.texts.each {|text| temp_texts.push(text.clone)}
  263.     if temp_texts[0] != nil and temp_texts[0].include?(":")
  264.       # 半身像左右判断
  265.       if temp_texts[0].split(/@/)[1] =~ /[Rr]/
  266.         @show_right = true
  267.         temp_texts[0] = temp_texts[0].split(/@/)[0]
  268.       end
  269.       # 去冒号加修饰符(可选)
  270.       if AUTO_ADD
  271.         temp_texts[0].sub!(/\:/) { "" }
  272.         temp_texts[0] = SYMBOL[0,SYMBOL.size/2] +
  273.         temp_texts[0] + SYMBOL[SYMBOL.size/2,SYMBOL.size/2]
  274.       end
  275.       # 设定文字颜色
  276.       temp_texts[0] = "\\C[#{NAME_FONT_COLOR}]" +
  277.       temp_texts[0] + "\\C[#{MSG_FONT_COLOR}]"
  278.       # 设定文字字体
  279.       temp_texts[0] = "\\F[N#{NAME_FONT_NAME}]" +
  280.       temp_texts[0] + "\\F[N#{MSG_FONT_NAME}]"
  281.       # 显示名称背景条
  282.       show_namebar_sprite
  283.     end
  284.     @text = ""
  285.     for i in 0...temp_texts.size
  286.       @text += "  " if i >= $game_message.choice_start
  287.       @text += temp_texts[i].clone + "\x00"
  288.     end
  289.     @item_max = $game_message.choice_max
  290.     convert_special_characters
  291.     ##reset_window
  292.     new_page
  293.   end
  294.   #--------------------------------------------------------------------------
  295.   # ◎ 更换页面处理
  296.   #--------------------------------------------------------------------------
  297.   def new_page
  298.     contents.clear
  299.     # 初始化文字描绘起点
  300.     @contents_x = 0
  301.     # 除名称外文字右移1字符
  302.     @contents_x += MSG_FONT_SIZE+2 unless show_name?
  303.     if $game_message.face_name.empty?
  304.       @face_sprite.bitmap.clear
  305.     else
  306.       name = $game_message.face_name
  307.       index = $game_message.face_index
  308.       # 获取半身像宽度
  309.       get_face_width(name)
  310.       # 计算文字横坐标起始
  311.       @contents_x += @face_width-16 unless @show_right
  312.       draw_msg_face(name, index)
  313.       # 设定半身像坐标
  314.       set_face_pos
  315.     end
  316.     @contents_y = 0
  317.     @line_count = 0
  318.     @show_fast = false
  319.     @line_show_fast = false
  320.     @pause_skip = false
  321.     contents.font.color = text_color(0)
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ◎ 换行处理
  325.   #--------------------------------------------------------------------------
  326.   def new_line
  327.     @contents_x = 0
  328.     unless $game_message.face_name.empty?
  329.       # 半身像显示在左时
  330.       @contents_x = @face_width-16 unless @show_right
  331.     end
  332.     # 除名称外文字右移1字符
  333.     @contents_x += (MSG_FONT_SIZE+2)
  334.     # 显示名称之后,对话内容下移 NAME_Y_ADJ
  335.     @contents_y += NAME_Y_ADJ if @line_count == 0 and show_name?
  336.     # 以字号为新间距
  337.     @contents_y += (MSG_FONT_SIZE+2)
  338.     @line_count += 1
  339.     @line_show_fast = false
  340.   end
  341.   #--------------------------------------------------------------------------
  342.   # ◎ 特殊文字变换
  343.   #--------------------------------------------------------------------------
  344.   def convert_special_characters
  345.     @text.gsub!(/\\V\[(\d+)\]/i)  { $game_variables[$1.to_i] }
  346.     @text.gsub!(/\\V\[(\d+)\]/i)  { $game_variables[$1.to_i] }
  347.     @text.gsub!(/\\N\[(\d+)\]/i)  { $game_actors[$1.to_i].name }
  348.     @text.gsub!(/\\C\[(\d+)\]/i)  { "\x01[#{$1}]" }
  349.     @text.gsub!(/\\G/)            { "\x02" }
  350.     @text.gsub!(/\\\./)           { "\x03" }
  351.     @text.gsub!(/\\\|/)           { "\x04" }
  352.     @text.gsub!(/\\!/)            { "\x05" }
  353.     @text.gsub!(/\\>/)            { "\x06" }
  354.     @text.gsub!(/\\</)            { "\x07" }
  355.     @text.gsub!(/\\\^/)           { "\x08" }
  356.     @text.gsub!(/\\\\/)           { "\\" }
  357.     # 更改不透明度
  358.     @text.gsub!(/\\O\[(\d+)\]/i)  { "\x09[#{$1}]" }
  359.     # 显示数据库元素
  360.     @text.gsub!(/\\S\[(\d+)\]/i)  { "\x10[#{$1}]" + $data_skills[$1.to_i].name }
  361.     @text.gsub!(/\\I\[(\d+)\]/i)  { "\x11[#{$1}]" + $data_items[$1.to_i].name }
  362.     @text.gsub!(/\\W\[(\d+)\]/i)  { "\x12[#{$1}]" + $data_weapons[$1.to_i].name }
  363.     @text.gsub!(/\\A\[(\d+)\]/i)  { "\x13[#{$1}]" + $data_armors[$1.to_i].name }
  364.     # 更改字体
  365.     @text.gsub!(/\\F\[S(\d+)\]/i) { "\x14[#{$1}]" }
  366.     @text.gsub!(/\\F\[N(\d+)\]/i) { "\x15[#{$1}]" }
  367.     @text.gsub!(/\\F\[C(\d+)\]/i) { "\x16[#{$1}]" }
  368.     # 自动关闭
  369.     @text.gsub!(/\\X\[(\d+)\]/i)  { "\x17[#{$1}]" }
  370.     @text.gsub!(/\\X/i)            { "\x18" }
  371.   end
  372.   #--------------------------------------------------------------------------
  373.   # ◎ 设置窗口背景与位置
  374.   #--------------------------------------------------------------------------
  375.   def reset_window
  376.     @background = $game_message.background
  377.     @position = $game_message.position
  378.     if @background == 0   # 普通窗口
  379.       self.opacity = 255
  380.     else                  # 背景变暗、透明
  381.       self.opacity = 0
  382.     end
  383.     case @position
  384.     when 0  # 上
  385.       self.y = 0
  386.       @gold_window.y = 360
  387.     when 1  # 中
  388.       # 通过计算获取
  389.       self.y = (Graphics.height-self.height)/2
  390.       @gold_window.y = 0
  391.     when 2  # 下
  392.       # 通过计算获取
  393.       self.y = Graphics.height-self.height
  394.       @gold_window.y = 0
  395.     end
  396.   end
  397.   #--------------------------------------------------------------------------
  398.   # ◎ 消息结束
  399.   #--------------------------------------------------------------------------
  400.   def terminate_message
  401.     self.active = false
  402.     self.pause = false
  403.     self.index = -1
  404.     @gold_window.close
  405.     @number_input_window.active = false
  406.     @number_input_window.visible = false
  407.     $game_message.main_proc.call if $game_message.main_proc != nil
  408.     $game_message.clear
  409.     # 处理名称背景条和半身像
  410.     @namebar_sprite.visible = false
  411.     @face_sprite.visible = false
  412.     @face_sprite.bitmap.clear
  413.   end
  414.   #--------------------------------------------------------------------------
  415.   # ◎ 更新消息
  416.   #--------------------------------------------------------------------------
  417.   def update_message
  418.     loop do
  419.       c = @text.slice!(/./m)            # 获取下一条文字
  420.       case c
  421.       when nil                          # 没有可以显示的文字
  422.         finish_message                  # 更新结束
  423.         break
  424.       when "\x00"                       # 换行
  425.         new_line
  426.         if @line_count >= MAX_LINE      # 行数为最大时
  427.           unless @text.empty?           # 如果还有增加则继续
  428.             self.pause = true           # 等待输入
  429.             break
  430.           end
  431.         end
  432.       when "\x01"                       # \C[n]  (更改文字色)
  433.         @text.sub!(/\[([0-9]+)\]/, "")
  434.         contents.font.color = text_color($1.to_i)
  435.         next
  436.       when "\x02"                       # \G  (显示所持金)
  437.         @gold_window.refresh
  438.         @gold_window.open
  439.       when "\x03"                       # \.  (等待 1/4 秒)
  440.         @wait_count = 15
  441.         break
  442.       when "\x04"                       # \|  (等待 1 秒)
  443.         @wait_count = 60
  444.         break
  445.       when "\x05"                       # \!  (等待输入)
  446.         self.pause = true
  447.         break
  448.       when "\x06"                       # \>  (瞬间显示 ON)
  449.         @line_show_fast = true
  450.       when "\x07"                       # \<  (瞬间显示 OFF)
  451.         @line_show_fast = false
  452.       when "\x08"                       # \^  (不等待输入)
  453.         @pause_skip = true
  454.       # 更改不透明度的情况下
  455.       when "\x09"
  456.         @text.sub!(/\[(\d+)\]/, "")
  457.         contents.font.color.alpha = $1.to_i
  458.       # 显示技能情况下
  459.       when "\x10"
  460.         @text.sub!(/\[(\d+)\]/, "")
  461.         draw_icon($data_skills[$1.to_i].icon_index, @contents_x, @contents_y)
  462.         # 纵坐标增加图标宽度
  463.         @contents_x += 24
  464.       # 显示物品情况下
  465.       when "\x11"
  466.         @text.sub!(/\[(\d+)\]/, "")
  467.         draw_icon($data_items[$1.to_i].icon_index, @contents_x, @contents_y)
  468.         # 纵坐标增加图标宽度
  469.         @contents_x += 24
  470.       # 显示武器情况下
  471.       when "\x12"
  472.         @text.sub!(/\[(\d+)\]/, "")
  473.         draw_icon($data_weapons[$1.to_i].icon_index, @contents_x, @contents_y)
  474.         # 纵坐标增加图标宽度
  475.         @contents_x += 24
  476.       # 显示防具情况下
  477.       when "\x13"
  478.         @text.sub!(/\[(\d+)\]/, "")
  479.         draw_icon($data_armors[$1.to_i].icon_index, @contents_x, @contents_y)
  480.         # 纵坐标增加图标宽度
  481.         @contents_x += 24
  482.       # 更改字体的情况下
  483.       when "\x14"
  484.         @text.sub!(/\[(\d+)\]/, "")
  485.         contents.font.size = $1.to_i
  486.       when "\x15"
  487.         @text.sub!(/\[(\d+)\]/, "")
  488.         contents.font.name = FONT_ARRAY[$1.to_i]
  489.       when "\x16"
  490.         @text.sub!(/\[(\d+)\]/, "")
  491.         contents.font.color = text_color($1.to_i)
  492.       # 自动关闭对话框的情况下
  493.       when "\x17"
  494.         @text.sub!(/\[(\d+)\]/, "")
  495.         @auto_close = $1.to_i
  496.       when "\x18"
  497.         @auto_close = AUTO_CLOSE
  498.       # 普通文字的情况下
  499.       else
  500.         font_height = contents.font.size + 2
  501.         contents.draw_text(@contents_x, @contents_y, 40, font_height, c)
  502.         c_width = contents.text_size(c).width
  503.         @contents_x += c_width
  504.       end
  505.       break unless @show_fast or @line_show_fast
  506.     end
  507.   end
  508.   #--------------------------------------------------------------------------
  509.   # ◎ 消息更新结束
  510.   #--------------------------------------------------------------------------
  511.   def finish_message
  512.     if $game_message.choice_max > 0
  513.       start_choice
  514.     elsif $game_message.num_input_variable_id > 0
  515.       start_number_input
  516.     elsif @pause_skip
  517.       terminate_message
  518.     else
  519.       self.pause = true
  520.     end
  521.     @wait_count = 10
  522.     @text = nil
  523.   end
  524.   #--------------------------------------------------------------------------
  525.   # ● 开始选择项
  526.   #--------------------------------------------------------------------------
  527.   def start_choice
  528.     self.active = true
  529.     self.index = 0
  530.   end
  531.   #--------------------------------------------------------------------------
  532.   # ◎ 开始输入数值
  533.   #--------------------------------------------------------------------------
  534.   def start_number_input
  535.     digits_max = $game_message.num_input_digits_max
  536.     number = $game_variables[$game_message.num_input_variable_id]
  537.     @number_input_window.digits_max = digits_max
  538.     @number_input_window.number = number
  539.     if $game_message.face_name.empty?
  540.       @number_input_window.x = x
  541.     else
  542.       # 代入半身像宽度
  543.       @number_input_window.x = x + @face_width
  544.     end
  545.     @number_input_window.y = y + @contents_y
  546.     @number_input_window.active = true
  547.     @number_input_window.visible = true
  548.     @number_input_window.update
  549.   end
  550.   #--------------------------------------------------------------------------
  551.   # ◎ 更新光标 #可能仍须增加判断
  552.   #--------------------------------------------------------------------------
  553.   def update_cursor
  554.     if @index >= 0
  555.       if $game_message.face_name.empty?
  556.         x = 0
  557.         y = ($game_message.choice_start+@index)*(MSG_FONT_SIZE+2)
  558.         width = contents.width
  559.       else
  560.         x = @show_right ? 0 : @face_width
  561.         y = ($game_message.choice_start+@index)*(MSG_FONT_SIZE+2) + NAME_Y_ADJ
  562.         width = contents.width - @face_width
  563.       end
  564.       self.cursor_rect.set(x, y, width, (MSG_FONT_SIZE+2))
  565.     else
  566.       self.cursor_rect.empty
  567.     end
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # ● 文章显示输入处理
  571.   #--------------------------------------------------------------------------
  572.   def input_pause
  573.     if Input.trigger?(Input::B) or Input.trigger?(Input::C)
  574.       self.pause = false
  575.       if @text != nil and not @text.empty?
  576.         new_page if @line_count >= MAX_LINE
  577.       else
  578.         terminate_message
  579.       end
  580.     end
  581.   end
  582.   #--------------------------------------------------------------------------
  583.   # ● 选择项输入处理
  584.   #--------------------------------------------------------------------------
  585.   def input_choice
  586.     if Input.trigger?(Input::B)
  587.       if $game_message.choice_cancel_type > 0
  588.         Sound.play_cancel
  589.         $game_message.choice_proc.call($game_message.choice_cancel_type - 1)
  590.         terminate_message
  591.       end
  592.     elsif Input.trigger?(Input::C)
  593.       Sound.play_decision
  594.       $game_message.choice_proc.call(self.index)
  595.       terminate_message
  596.     end
  597.   end
  598.   #--------------------------------------------------------------------------
  599.   # ● 数值输入处理
  600.   #--------------------------------------------------------------------------
  601.   def input_number
  602.     if Input.trigger?(Input::C)
  603.       Sound.play_decision
  604.       $game_variables[$game_message.num_input_variable_id] =
  605.         @number_input_window.number
  606.       $game_map.need_refresh = true
  607.       terminate_message
  608.     end
  609.   end
  610.   #--------------------------------------------------------------------------
  611.   # ○ 生成名称背景条
  612.   #--------------------------------------------------------------------------
  613.   def create_namebar_sprite
  614.     @namebar_sprite = Sprite.new
  615.     @namebar_sprite.bitmap = Bitmap.new(Graphics.width-NAME_X_ADJ, NAME_FONT_SIZE+4)
  616.     # 可视性
  617.     @namebar_sprite.visible = false
  618.     # 准备参数
  619.     rect = Rect.new(NAME_X_ADJ, 0, @namebar_sprite.width, @namebar_sprite.height)
  620.     color1 = text_color(NAME_BAR_COLOR)
  621.     color2 = text_color(NAME_BAR_COLOR)
  622.     color1.alpha = NAME_BAR_OPACITY
  623.     color2.alpha = 0
  624.     # 描绘渐变条
  625.     @namebar_sprite.bitmap.gradient_fill_rect(rect, color1, color2)
  626.   end
  627.   #--------------------------------------------------------------------------
  628.   # ○ 生成半身像
  629.   #--------------------------------------------------------------------------
  630.   def create_face_sprite
  631.     @face_sprite = Sprite.new
  632.     @face_sprite.bitmap = Bitmap.new(1,1)
  633.     @face_sprite.z = self.z + 2
  634.     @face_sprite.visible = false
  635.     @old_name = ""                        # 判断头像是否改变
  636.     @old_index = 0                        # 判断头像是否改变
  637.   end
  638.   #--------------------------------------------------------------------------
  639.   # ○ 显示名称背景条
  640.   #--------------------------------------------------------------------------
  641.   def show_namebar_sprite
  642.     # 坐标跟随
  643.     @namebar_sprite.x = self.x
  644.     @namebar_sprite.y = self.y + 16 - 1
  645.     @namebar_sprite.z = self.z + 1
  646.     # 可视性
  647.     @namebar_sprite.visible = true
  648.   end
  649.   #--------------------------------------------------------------------------
  650.   # ○ 描绘半身像
  651.   #     face_name  : 半身像图像文件名
  652.   #     face_index : 半身像图像索引
  653.   #--------------------------------------------------------------------------
  654.   def draw_msg_face(face_name, face_index)
  655.     bitmap = Cache.face(face_name)
  656.     width = bitmap.width / 4
  657.     height = bitmap.height / 2
  658.     rect = Rect.new(0, 0, 0, 0)
  659.     rect.x = face_index % 4 * width
  660.     rect.y = face_index / 4 * height
  661.     rect.width = width
  662.     rect.height = height
  663.     @face_sprite.bitmap = Bitmap.new(width, height)
  664.     @face_sprite.bitmap.blt(0, 0, bitmap, rect)
  665.     @face_sprite.mirror = @show_right
  666.     bitmap.dispose
  667.   end
  668.   #--------------------------------------------------------------------------
  669.   # ○ 是否显示名称
  670.   #--------------------------------------------------------------------------
  671.   def show_name?
  672.     return @namebar_sprite.visible
  673.   end
  674.   #--------------------------------------------------------------------------
  675.   # ○ 返回字体
  676.   #     index       : 编号
  677.   #--------------------------------------------------------------------------
  678.   def get_font(index)
  679.     case index
  680.     when 0
  681.       return Font.new(FONT_ARRAY[NAME_FONT_NAME], NAME_FONT_SIZE)
  682.     when 1
  683.       return Font.new(FONT_ARRAY[MSG_FONT_NAME], MSG_FONT_SIZE)
  684.     end
  685.   end
  686.   #--------------------------------------------------------------------------
  687.   # ○ 获取半身像宽度
  688.   #     face_name  : 半身像图像文件名
  689.   #--------------------------------------------------------------------------
  690.   def get_face_width(face_name)
  691.     bitmap = Cache.face(face_name)
  692.     @face_width = bitmap.width / 4
  693.     bitmap.dispose
  694.   end
  695.   #--------------------------------------------------------------------------
  696.   # ○ 设定半身像位置
  697.   #--------------------------------------------------------------------------
  698.   def set_face_pos
  699.     @face_sprite.y = self.y + (self.height-@face_sprite.height) + FACE_Y_ADJ
  700.     if @show_right
  701.       @face_sprite.x = self.width - @face_sprite.width - FACE_X_ADJ
  702.     else
  703.       @face_sprite.x = self.x + FACE_X_ADJ
  704.     end
  705.     # 可视性
  706.     @face_sprite.visible = true
  707.   end
  708. end
复制代码


   >>点击此处下载范例工程 (2008-09-12 更新)<<

截图(图中半身像素材来自QQ三国,特此声明):


















--------------------------------
2008-09-11 更新
新增以下功能,顺便更名为"功能版" - -
   ① 在对话中更改字体的方法:
       \f[sX]:更改字号为X
       \f[nX]:更改字体名称为预设字体组第X号字体 (预设字体组请看参数设定)
       \f[cX]:更改字色为第X号颜色 (text_color中的定义)

   ② 在对话中显示(技能 物品 武器 防具)图标和名称的方法:
       \s[X]: 显示第X号技能图标和名称
       \i[X]: 显示第X号物品图标和名称
       \w[X]: 显示第X号武器图标和名称
       \a[X]: 显示第X号防具图标和名称

   ③ 在对话中更改文字不透明度的方法:
       \o[X]: 把文字不透明度更改为X (取值范围在0~255)

   ④  指定时间后自动关闭对话框的方法:
       \x[X]: 对话框将在X帧后自动关闭
       \x:    省略参数时,将在AUTO_CLOSE帧后自动关闭 (AUTO_CLOSE在参数设定中)















发布页面:http://rpg.blue/web/htm/news1217.htm
vip+3



              [本贴由 66RPG发布员 于 2008-12-19 23:56:07 进行了编辑]

评分

参与人数 1星屑 +2 收起 理由
lzy136188230 + 2 精品文章

查看全部评分

阿桑奇不是一个偶像;阿桑奇是一种思想

TA还没有解放自身的潜力。

Lv1.梦旅人

很傻很天真

梦石
0
星屑
55
在线时间
3 小时
注册时间
2007-3-13
帖子
3667
发表于 2008-9-1 01:36:38 | 显示全部楼层
第一张截图的老爷爷够扁的……
我看扁他……
回复 支持 反对

使用道具 举报

[动态]受到SailCat的挑战,被揍得晕头转向。 (打开TA的战斗卡片)

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
2363
在线时间
3561 小时
注册时间
2006-9-6
帖子
37356

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

发表于 2008-9-1 03:54:25 | 显示全部楼层
话说我记得小雨的客栈里也有显示半身像的系统……
[LINE]1,#dddddd[/LINE]
话说这个半身像怎么设置呢…… = =
Lofter个站:点击进入吧 不要犹豫了come on baby! (闲水、游戏预告、游戏发布)

回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

 楼主| 发表于 2008-9-1 04:25:08 | 显示全部楼层
以下引用越前リョーマ于2008-8-31 19:54:25的发言:
话说我记得小雨的客栈里也有显示半身像的系统……
话说这个半身像怎么设置呢…… = =
[本贴由作者于 2008-8-31 19:57:25 最后编辑]

是么...我去载

阿桑奇不是一个偶像;阿桑奇是一种思想

回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

 楼主| 发表于 2008-9-1 04:38:22 | 显示全部楼层
以下引用越前リョーマ于2008-8-31 19:54:25的发言:
话说我记得小雨的客栈里也有显示半身像的系统……
话说这个半身像怎么设置呢…… = =
[本贴由作者于 2008-8-31 19:57:25 最后编辑]

原来是公共事件显示半身像...

我的脚本不需要专门设置,跟普通对话框一样用法,需要改半身像显示位置时,在名称后加"@r"

阿桑奇不是一个偶像;阿桑奇是一种思想

回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-8-4
帖子
608
发表于 2008-9-1 04:41:57 | 显示全部楼层
我想问,如果我载入了这个脚本 是不是所有图像都会自动判定成半身像的处理呢?

比如我在一段对话想用半身像,但是在另外一段中又想用普通的时候

要怎么办?

直接选择普通的话,会出现显示问题么?

花开叶不在,叶长花凋零,世世相错
回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

 楼主| 发表于 2008-9-1 04:45:33 | 显示全部楼层
以下引用約束于2008-8-31 20:41:57的发言:

我想问,如果我载入了这个脚本 是不是所有图像都会自动判定成半身像的处理呢?

比如我在一段对话想用半身像,但是在另外一段中又想用普通的时候

要怎么办?

直接选择普通的话,会出现显示问题么?

考虑过切换到96*96头像的开关,但最后删掉了,我不觉得一个游戏里一会半身像一会普通头像是个好主意...有意使用普通头像的人请54此脚本

阿桑奇不是一个偶像;阿桑奇是一种思想

回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-8-4
帖子
608
发表于 2008-9-1 04:46:50 | 显示全部楼层
T-T  那你給个有开关的嘛

我并不能找到那么多半身像不是么?
花开叶不在,叶长花凋零,世世相错
回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

 楼主| 发表于 2008-9-1 04:50:39 | 显示全部楼层
已删了
从前的vx呼出对话框就是为了通吃各种头像的可能性,写了1000+行的脚本,还更卡

----------------------------------------------------
目前考虑添加显示物品图标什么的这类功能

阿桑奇不是一个偶像;阿桑奇是一种思想

回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-8-4
帖子
608
发表于 2008-9-1 04:55:42 | 显示全部楼层
原来是这么回事。。。叹。。。真的好想用的说

谢谢你拉~辛苦写了这个

很好看~
花开叶不在,叶长花凋零,世世相错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:fux2@moe9th.com|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2019-8-20 22:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表