Project1

标题: [XP]怎么用开关控制Fuki对话框啊 [打印本页]

作者: 哆啦溯    时间: 2014-8-5 10:37
标题: [XP]怎么用开关控制Fuki对话框啊
游戏中有些时候不用Fuki对话框...
我参照【物品得失显示】脚本在【Fuki对话框】脚本最前面加了这个

$开关 = 50

if $game_switches[$开关]== true


然后在脚本最后面加上
end

但是会显示【if $game_switches[$开关]== true】这一行出现错误啊,这是怎么一回事。
在下脚本盲,求教。

下面是【Fuki对话框优化版 v6】脚本
RUBY 代码复制
  1. #==============================================================================
  2. #    Fuki对话框优化版 v6
  3. #    原版作者:by パラ犬(日)
  4. #    汉化修正:by 66RPG.com
  5. #------------------------------------------------------------------------------
  6. #    2006年01月 汉化修改 by bbschat
  7. #    2007年02月 脚本更新 by KKME
  8. #    2007年07月 脚本更新 by 绫晓露雪萌
  9. #    2010年05月 脚本优化 by Linki Shy
  10. #    2011年10月 阴影修正 by 各种压力的猫君
  11. #    2011年11月 脚本增强 by 各种压力的猫君
  12. #==============================================================================
  13. #
  14. # 【脚本功能】
  15. #
  16. #   1. 此脚本主要是解决了在1.03版XP上的方块问题,以及增加了一些功能
  17. #
  18. #   2. 人名美化使用方法与以前一样
  19. #
  20. #   3. 默认人物头像在左边显示
  21. #      如果需要右边显示,在输入的名称之后加"@r"即可
  22. #      例: "阿尔西斯@r:"(注意必须小写)
  23. #
  24. #   4. 在对话中更改字体的方法:
  25. #       \f[X]:更改字号为X
  26. #
  27. #   5. 在对话中显示(技能 物品 武器 防具 人物)图标和名称的方法:
  28. #       \s[X]: 显示第X号技能图标和名称
  29. #       \i[X]: 显示第X号物品图标和名称
  30. #       \w[X]: 显示第X号武器图标和名称
  31. #       \a[X]: 显示第X号防具图标和名称
  32. #       \r[X]: 显示第X号人物图标和名称
  33. #
  34. #   6. 在对话中更改文字不透明度的方法:
  35. #       \o[X]: 把文字不透明度更改为X (取值范围为0~255)
  36. #   
  37. #   7. 在对话中关闭或开启拟声音效的方法:
  38. #       \q:默认开启时,执行一次关闭,再执行一次则开启
  39. #
  40. #   8. 如果需要自定义字体颜色,
  41. #       可以打开"Graphics/Windowskins"目录下的"Window.png"文件查看
  42. #       使用方法与VX类似
  43. #
  44. #   9. 追加了不为瞬间显示时确定键快速显示的功能
  45. #
  46. #  10. $mes_id = 0          代表本事件
  47. #      $mes_id = -1         代表主角
  48. #      $mes_id = 其他数值   代表事件编号
  49. #      $mes_id = nil        代表不使用fuki形式
  50. #
  51. #
  52. # 【素材要求】
  53. #
  54. #   1. 要求所有半身像朝向一致(默认是正面偏右)
  55. #
  56. #==============================================================================
  57.  
  58. #==============================================================================
  59. # ■ Fuki_v6_Setup
  60. #------------------------------------------------------------------------------
  61. #    Fuki对话框优化版 v6 参数设置
  62. #==============================================================================
  63. module Fuki_v6_Setup
  64.  
  65.   #--------------------------------------------------------------------------
  66.   # ● 外观
  67.   #--------------------------------------------------------------------------
  68.  
  69.     # 窗口透明度
  70.     FUKI_OPACITY = 255         # 呼出对话框
  71.     MES_OPACITY  = 160         # 默认信息窗口
  72.  
  73.     # 角色高度尺寸
  74.     CHARACTOR_HEIGHT = 50
  75.  
  76.     # 呼出对话框的相对位置(纵坐标)
  77.     POP_SHIFT_TOP = 0          # 表示位置为上的时候
  78.     POP_SHIFT_UNDER = -4       # 表示位置为下的时候
  79.  
  80.     # 信息的表示速度(数字越小速度越快,0为瞬间表示)
  81.     # 游戏中可以随时用数字代入 $MES_SPEED 来改变消息表示速度。
  82.     MES_SPEED = 1
  83.  
  84.     # 名称修饰符(一对)(此处参考 沉影不器 的VX版对话框加强)
  85.     NAME_SYMBOL = "【】"
  86.  
  87.     # 名称颜色
  88.     NAME_COLOR = 7
  89.  
  90.   #--------------------------------------------------------------------------
  91.   # ● 功能( true / false )
  92.   #--------------------------------------------------------------------------
  93.  
  94.     # 是否显示尾巴
  95.     TAIL_SHOW = true
  96.  
  97.     # 是否播放打字音效
  98.     $play_voice = true
  99.  
  100.     # $MES_SPEED不为0时,是否可以用确定键快速显示对话
  101.     ENABLE_SKIP = true
  102.  
  103.     # 窗口表示时是否根据画面大小自动改变窗口出现的位置
  104.     POS_FIX = true
  105.  
  106.   #--------------------------------------------------------------------------
  107.   # ● 字体
  108.   #--------------------------------------------------------------------------
  109.  
  110.     # 预设字体组
  111.     FONT_ARRAY = ["黑体", "宋体", "仿宋"]
  112.  
  113.     # 默认字号【已知BUG,当默认字号不为20时会导致各种奇怪问题……暂未修正】
  114.     MES_FONT_SIZE = 20
  115.  
  116.     # 默认字体颜色
  117.     FUKI_COLOR = Color.new(0, 0, 0, 255)
  118.  
  119.   #--------------------------------------------------------------------------
  120.   # ● 目录
  121.   #--------------------------------------------------------------------------
  122.  
  123.     # 呼出对话框用Skin名称(自动在 Graphics\Windowskins 内搜索)
  124.     FUKI_SKIN_NAME = "Window"
  125.  
  126.     # 设定头像图片保存目录
  127.     FACE_PIC_DIR = "Graphics/Faces/"
  128.  
  129.   #--------------------------------------------------------------------------
  130.   # ● 头像对应表
  131.   #--------------------------------------------------------------------------
  132.   #    如果不想使用角色名字直接作为头像文件名
  133.   #    可在这里重新设定角色名字与文件名的对应关系
  134.   #
  135.   #  (这功能怎么用我自己也没搞明白……大家无视吧 by 各种压力的猫君)
  136.   #--------------------------------------------------------------------------
  137.  
  138.     NAME_TABLE = {"玩家"=>"维斯特"}
  139.  
  140. end
  141. #==============================================================================
  142.  
  143. "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"
  144. "┃        自定义内容到此结束,以下内容切勿随意修改        ┃"
  145. "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"
  146.  
  147. #==============================================================================
  148. # ● 初始化全局变量并定义chat方法
  149. #==============================================================================
  150. $mes_id   = nil
  151. $mes_name = ""
  152. def chat(id = nil,name = "")
  153.   $mes_id = id
  154.   $mes_name = name
  155. end
  156.  
  157. #==============================================================================
  158. # ■ Game_Temp
  159. #==============================================================================
  160.  
  161. class Game_Temp
  162.   #--------------------------------------------------------------------------
  163.   # ● 定义实例变量
  164.   #--------------------------------------------------------------------------
  165.   attr_accessor:namebmp      # 记录角色名字和头像文件名对应关系
  166.   #--------------------------------------------------------------------------
  167.   # ● 初始化对像
  168.   #--------------------------------------------------------------------------
  169.   alias initialize_fuki initialize
  170.   def initialize
  171.     initialize_fuki
  172.     @namebmp = Fuki_v6_Setup::NAME_TABLE
  173.   end
  174. end
  175.  
  176. #==============================================================================
  177. # ■ Window_InputNumber
  178. #==============================================================================
  179.  
  180. class Window_InputNumber < Window_Base
  181.   #--------------------------------------------------------------------------
  182.   # ● 初始化对像
  183.   #     digits_max : 位数
  184.   #--------------------------------------------------------------------------
  185.   def initialize(digits_max)
  186.     @digits_max = digits_max
  187.     @number = 0
  188.     # 从数字的幅度计算(假定与 0~9 等幅)光标的幅度
  189.     dummy_bitmap = Bitmap.new(Fuki_v6_Setup::MES_FONT_SIZE, Fuki_v6_Setup::MES_FONT_SIZE)
  190.     @cursor_width = dummy_bitmap.text_size("0").width + 8
  191.     dummy_bitmap.dispose
  192.     super(0, 0, @cursor_width * @digits_max + 32, 64)
  193.     self.contents = Bitmap.new(width - 32, height - 32)
  194.     self.contents.font.size = Fuki_v6_Setup::MES_FONT_SIZE
  195.     self.contents.font.color = Fuki_v6_Setup::FUKI_COLOR
  196.     self.z += 9999
  197.     self.opacity = 0
  198.     @index = 0
  199.     refresh
  200.     update_cursor_rect
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ● 更新光标矩形
  204.   #--------------------------------------------------------------------------
  205.   def update_cursor_rect
  206.     self.cursor_rect.set(@index * @cursor_width-4, 0, @cursor_width, Fuki_v6_Setup::MES_FONT_SIZE + 4)
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # ● 刷新
  210.   #--------------------------------------------------------------------------
  211.   def refresh
  212.     self.contents.clear
  213.     s = sprintf("%0*d", @digits_max, @number)
  214.     for i in 0...@digits_max
  215.       self.contents.draw_text(i * @cursor_width, 0, 24, Fuki_v6_Setup::MES_FONT_SIZE + 4, s[i,1])
  216.     end
  217.   end
  218. end
  219.  
  220. #==============================================================================
  221. # ■ Window_Message
  222. #==============================================================================
  223.  
  224. class Window_Message < Window_Selectable
  225.  
  226.   #--------------------------------------------------------------------------
  227.   # ● 初始化状态
  228.   #--------------------------------------------------------------------------
  229.   def initialize
  230.     super(80, 304, 480, 160)
  231.     self.contents = Bitmap.new(width - 32, height - 32)
  232.     self.contents.font.color = text_color(0)
  233.     self.visible = false
  234.     self.z = 9998
  235.     @fade_in = false
  236.     @fade_out = false
  237.     @contents_showing = false
  238.     @cursor_width = 0
  239.     self.active = false
  240.     self.index = -1
  241.     [url=home.php?mod=space&uid=133944]@w[/url] = 0
  242.     @h = 0
  243.     [url=home.php?mod=space&uid=36110]@Wait[/url] = 0
  244.     @dx = 0
  245.     @dy = 0
  246.     $MES_SPEED = Fuki_v6_Setup::MES_SPEED
  247.     #------------------------
  248.     # ★ 特殊时期中断标志
  249.     #------------------------
  250.     @no_term_stop = false
  251.     @save_x = 0
  252.     @save_y = 0
  253.     @old_text_info = []
  254.     @show_right = false
  255.     @show_name  = false
  256.     @face_width = 0
  257.   end
  258.   #--------------------------------------------------------------------------
  259.   # ○ 决定窗口尺寸并生成窗口
  260.   #--------------------------------------------------------------------------
  261.   def refresh_create
  262.     unless @no_term_stop
  263.       @pic_skin.dispose if @pic_skin != nil
  264.       if $game_temp.message_text.include?(":")
  265.         if $game_temp.message_text.include?("@r")
  266.           @show_right = true
  267.           $game_temp.message_text.sub!(/\@r/, "")
  268.         end
  269.         @show_name = true
  270.         # 添加名称修饰符
  271.         unless Fuki_v6_Setup::NAME_SYMBOL.empty?
  272.           $game_temp.message_text = '\c[' + Fuki_v6_Setup::NAME_COLOR.to_s + ']' + Fuki_v6_Setup::NAME_SYMBOL[0,Fuki_v6_Setup::NAME_SYMBOL.size/2] + $game_temp.message_text
  273.           $game_temp.message_text.sub!(/\:/, Fuki_v6_Setup::NAME_SYMBOL[Fuki_v6_Setup::NAME_SYMBOL.size/2,Fuki_v6_Setup::NAME_SYMBOL.size/2] + '\c[0]')
  274.         end
  275.       end
  276.       self.contents.clear
  277.       self.contents.font.color = normal_color
  278.       # 取得窗口尺寸
  279.       get_windowsize
  280.       w = @w + 40
  281.       h = @h * (self.contents.font.size + 4) + 30
  282.       h = 64 if h < 64
  283.       # 生成呼出窗口
  284.       set_fukidasi(self.x, self.y, w, h)
  285.       draw_msg_face
  286.       create_backbmp
  287.     end
  288.     # 初始化信息表示使用的变量
  289.     @dx = @save_x
  290.     @dx += @face_width unless @show_right
  291.     @dy = @save_y
  292.     @cursor_width = 0
  293.     @contents_drawing = true
  294.     # 瞬间表示的情况下
  295.     if $MES_SPEED == 0
  296.       # 循环信息描绘处理
  297.       while $game_temp.message_text != ""
  298.         draw_massage
  299.       end
  300.       draw_opt_text
  301.       @contents_showing_end = true
  302.       @contents_drawing = false
  303.     else
  304.       # 一个一个描绘文字
  305.       refresh_drawtext
  306.     end
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   # ○ 一个一个描绘文字
  310.   #--------------------------------------------------------------------------
  311.   def refresh_drawtext
  312.     # 当按下确定键的时候直接显示剩余的全部文字
  313.     if Input.trigger?(Input::C) and Fuki_v6_Setup::ENABLE_SKIP
  314.       # 循环信息描绘处理
  315.       while $game_temp.message_text != ""
  316.         draw_massage
  317.       end
  318.       draw_opt_text
  319.       @contents_showing_end = true
  320.       @contents_drawing = false
  321.     elsif $game_temp.message_text != ""
  322.       if @wait > 0
  323.         @wait -= 1
  324.       elsif @wait == 0
  325.         # 描绘处理
  326.         draw_massage
  327.         @wait = $MES_SPEED
  328.       end
  329.     else
  330.       draw_opt_text
  331.       @contents_showing_end = true
  332.       @contents_drawing = false
  333.     end
  334.   end
  335.   #--------------------------------------------------------------------------
  336.   # ○ 取得窗口尺寸
  337.   #--------------------------------------------------------------------------
  338.   def get_windowsize
  339.     get_face_width($mes_name)
  340.     x = y = 0
  341.     @h = @w = 0
  342.     @cursor_width = 0
  343.     # 有选择项的话,处理字的缩进
  344.     if $game_temp.choice_start == 0
  345.       x = 16
  346.     end
  347.     # 有等待显示的文字的情况下
  348.     if $game_temp.message_text != nil
  349.     text = $game_temp.message_text.clone
  350.       # 限制文字处理
  351.       begin
  352.         last_text = text.clone
  353.         text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  354.       end until text == last_text
  355.       text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  356.         $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  357.       end
  358.       text.gsub!(/\\\\/)                 { "\x00" }
  359.       text.gsub!(/\\[Cc]\[([0-9]+)\]/)   { "\x01" }
  360.       text.gsub!(/\\[Gg]/)               { "\x02" }
  361.       text.gsub!(/\\[Ss]\[([0-9]+)\]/)   { "\x03" + $data_skills[$1.to_i].name }
  362.       text.gsub!(/\\[Ii]\[([0-9]+)\]/)   { "\x04" + $data_items[$1.to_i].name }
  363.       text.gsub!(/\\[Ww]\[([0-9]+)\]/)   { "\x05" + $data_weapons[$1.to_i].name }
  364.       text.gsub!(/\\[Aa]\[([0-9]+)\]/)   { "\x06" + $data_armors[$1.to_i].name }
  365.       text.gsub!(/\\[Rr]\[([0-9]+)\]/)   { "\x10" + $game_actors[$1.to_i].name }
  366.       # c 获取 1 个字 (如果不能取得文字就循环)
  367.       while ((c = text.slice!(/./m)) != nil)
  368.         if c == "\x00"
  369.           c = "\\"
  370.         end
  371.         if c == "\x01" or c == "\x02"
  372.           next
  373.         end
  374.         if c == "\x03" or c == "\x04" or c == "\x05" or c == "\x06" or c == "\x010"
  375.           c = "   "
  376.         end
  377.         if c == "\n"
  378.           # y 累加 1
  379.           y += 1
  380.           # 取得纵横尺寸
  381.           @h = y
  382.           @w = x > @w ? x : @w
  383.           if y >= $game_temp.choice_start
  384.             @w = x + Fuki_v6_Setup::MES_FONT_SIZE > @w ? x + Fuki_v6_Setup::MES_FONT_SIZE : @w
  385.           end
  386.           x = 0
  387.           x = Fuki_v6_Setup::MES_FONT_SIZE if y >= $game_temp.choice_start
  388.           # 下面的文字
  389.           next
  390.         end
  391.         # x 为要描绘文字的宽度加法运算
  392.         x += self.contents.text_size(c).width
  393.       end
  394.     end
  395.     # 输入数值的情况
  396.     if $game_temp.num_input_variable_id > 0
  397.       digits_max = $game_temp.num_input_digits_max
  398.       number = $game_variables[$game_temp.num_input_variable_id]
  399.       @h += 1
  400.       x = digits_max * self.contents.font.size + 16
  401.       @w = x > @w ? x : @w
  402.     end
  403.     @w += @face_width
  404.     @w = 128 if @w < 128
  405.   end
  406.   #--------------------------------------------------------------------------
  407.   # ○ 描绘信息处理
  408.   #--------------------------------------------------------------------------
  409.   def draw_massage
  410.     # 有等待显示的文字的情况下
  411.     if $game_temp.message_text != nil or @old_text_info != nil
  412.       text = $game_temp.message_text
  413.       # 限制文字处理
  414.       begin
  415.         last_text = text.clone
  416.         text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  417.       end until text == last_text
  418.       text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  419.         $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  420.       end
  421.       text.gsub!(/\\\\/)                 { "\x00" }
  422.       text.gsub!(/\\[Cc]\[([0-9]+)\]/)   { "\x01[#{$1}]" }
  423.       text.gsub!(/\\[Gg]/)               { "\x02" }
  424.       text.gsub!(/\\[Ss]\[([0-9]+)\]/)   { "\x03[#{$1}]" }
  425.       text.gsub!(/\\[Ii]\[([0-9]+)\]/)   { "\x04[#{$1}]" }
  426.       text.gsub!(/\\[Ww]\[([0-9]+)\]/)   { "\x05[#{$1}]" }
  427.       text.gsub!(/\\[Aa]\[([0-9]+)\]/)   { "\x06[#{$1}]" }
  428.       text.gsub!(/\\[Oo]\[([0-9]+)\]/)   { "\x07[#{$1}]" }
  429.       text.gsub!(/\\[Qq]/)               { "\x08" }
  430.       text.gsub!(/\\[Ff]\[([0-9]+)\]/)   { "\x09[#{$1}]" }
  431.       text.gsub!(/\\[Rr]\[([0-9]+)\]/)   { "\x10[#{$1}]" }
  432.       # c 获取 1 个字
  433.       c = text.slice!(/./m)
  434.       # 默认对话框采用默认颜色
  435.       self.contents.font.color = normal_color if $mes_id == nil
  436.       # 选择项的情况
  437.       if @dy >= $game_temp.choice_start
  438.         # 处理字的缩进
  439.         @dx = Fuki_v6_Setup::MES_FONT_SIZE
  440.         @dx += @face_width unless @show_right
  441.         @dx += Fuki_v6_Setup::MES_FONT_SIZE if @show_name
  442.         # 描绘文字
  443.         self.contents.draw_text(@dx, 24 * @dy, 24, 24, c)
  444.         # x 为要描绘文字宽度的加法运算
  445.         @dx += self.contents.text_size(c).width
  446.         # 循环
  447.         while ((c = text.slice!(/./m)) != "\n")
  448.           # 描绘文字
  449.           self.contents.draw_text(@dx, 24 * @dy, 24, 24, c)
  450.           # x 为要描绘文字宽度的加法运算
  451.           @dx += self.contents.text_size(c).width
  452.         end
  453.         if c == "\n"
  454.           # 更新光标宽度
  455.           @cursor_width = [@cursor_width, @dx - @face_width].max
  456.           # dy 累加 1
  457.           @dy += 1
  458.         end
  459.         return
  460.       end
  461.       case c
  462.       when "\x00"
  463.         c = "\\"            
  464.       when "\x01"                  
  465.         text.sub!(/\[([0-9]+)\]/, "")
  466.         color = $1.to_i
  467.         self.contents.font.color = text_color(color)
  468.       when "\x02"
  469.         @contents_showing_end = true
  470.         @contents_drawing = false
  471.         terminate_messageX
  472.         @save_x = @dx
  473.         @save_y = @dy
  474.       when "\x03"
  475.         text.sub!(/\[([0-9]+)\]/, "")
  476.         last_character
  477.         draw_icon($data_skills[$1.to_i], 4 + @dx, 24 * @dy)
  478.         @dx += self.contents.text_size("   ").width
  479.       when "\x04"
  480.         text.sub!(/\[([0-9]+)\]/, "")
  481.         last_character
  482.         draw_icon($data_items[$1.to_i], 4 + @dx, 24 * @dy)
  483.         @dx += self.contents.text_size("   ").width
  484.       when "\x05"
  485.         text.sub!(/\[([0-9]+)\]/, "")
  486.         last_character
  487.         draw_icon($data_weapons[$1.to_i], 4 + @dx, 24 * @dy)
  488.         @dx += self.contents.text_size("   ").width
  489.       when "\x06"
  490.         text.sub!(/\[([0-9]+)\]/, "")
  491.         last_character
  492.         draw_icon($data_armors[$1.to_i], 4 + @dx, 24 * @dy)
  493.         @dx += self.contents.text_size("   ").width
  494.       when "\x07"
  495.         text.sub!(/\[([0-9]+)\]/, "")
  496.         self.contents.font.color.alpha = $1.to_i
  497.       when "\x08"
  498.         text.sub!(/\[([0-9]+)\]/, "")
  499.         $play_voice = !$play_voice
  500.       when "\x09"
  501.         text.sub!(/\[([0-9]+)\]/, "")
  502.         self.contents.font.name = Fuki_v6_Setup::FONT_ARRAY[$1.to_i]
  503.       when "\x10"
  504.         text.sub!(/\[([0-9]+)\]/, "")
  505.         last_character
  506.         draw_actor_graphic($game_actors[$1.to_i], 4 + @dx, 24 * @dy)
  507.         @dx += self.contents.text_size("   ").width
  508.       when "\n"
  509.         @dy += 1
  510.         @dx = 0
  511.         @dx += @face_width unless @show_right
  512.         @dx += Fuki_v6_Setup::MES_FONT_SIZE if @show_name
  513.         last_character
  514.       else
  515.         last_character
  516.         size_zy = 6  # 设定文字动态增大幅度
  517.         if c != nil
  518.           self.contents.font.size = Fuki_v6_Setup::MES_FONT_SIZE
  519.           font_size = self.contents.font.size += size_zy
  520.           @old_text_info.push(@dx , @dy , font_size, self.contents.font.color.clone, c)
  521.           self.contents.draw_text(4 + @dx, (font_size + 4 - size_zy) * @dy - size_zy / 2, font_size, font_size, c)
  522.           self.contents.font.size -= size_zy
  523.           Audio.se_play("Audio/SE/Voice", 90, 100) if $play_voice and c != " "
  524.           @dx += self.contents.text_size(c).width
  525.         end
  526.       end
  527.     end
  528.   end
  529.   #--------------------------------------------------------------------------
  530.   # ○ 完成上一个字符的描绘
  531.   #--------------------------------------------------------------------------
  532.   def last_character
  533.     size_zy = 6  # 设定文字动态增大幅度
  534.     unless @old_text_info == []
  535.       self.contents.fill_rect (4 + @old_text_info[0], (@old_text_info[2]+ 4 - size_zy) * @old_text_info[1] - size_zy / 2, @old_text_info[2], @old_text_info[2], Color.new(0,0,0,0))
  536.       color = self.contents.font.color.clone
  537.       self.contents.font.color = @old_text_info[3].clone
  538.       self.contents.font.size = @old_text_info[2] -= size_zy
  539.       self.contents.draw_text(4 + @old_text_info[0], (@old_text_info[2] + 4) * @old_text_info[1], @old_text_info[2], @old_text_info[2], @old_text_info[4])
  540.       self.contents.font.color = color
  541.       @old_text_info = []
  542.     end
  543.   end
  544.   #--------------------------------------------------------------------------
  545.   # ○ 选择项和输入数值的情况下
  546.   #--------------------------------------------------------------------------
  547.   def draw_opt_text
  548.     # 选择项的情况下
  549.     if $game_temp.choice_max > 0
  550.       @item_max = $game_temp.choice_max
  551.       self.active = true
  552.       self.index = 0
  553.     end
  554.     # 输入数值的情况下
  555.     if $game_temp.num_input_variable_id > 0
  556.       digits_max = $game_temp.num_input_digits_max
  557.       number = $game_variables[$game_temp.num_input_variable_id]
  558.       @input_number_window = Window_InputNumber.new(digits_max)
  559.       @input_number_window.number = number
  560.       @input_number_window.x = self.x + @face_width + Fuki_v6_Setup::MES_FONT_SIZE + 8
  561.       @input_number_window.y = self.y + $game_temp.num_input_start * (Fuki_v6_Setup::MES_FONT_SIZE + 2)
  562.     end
  563.   end
  564.   #--------------------------------------------------------------------------
  565.   # ○ 生成背景图片
  566.   #--------------------------------------------------------------------------
  567.   def create_backbmp
  568.     @pic_skin.dispose if @pic_skin != nil
  569.     @pic_skin = Sprite.new
  570.     @pic_skin.opacity = 0 unless @no_term_stop
  571.     @pic_skin.bitmap = Bitmap.new(self.width + 32, self.height + 32)
  572.     @pic_skin.x = self.x + 2
  573.     @pic_skin.y = self.y + 2
  574.     @pic_skin.z = self.z
  575.     bitmap = RPG::Cache.windowskin(Fuki_v6_Setup::FUKI_SKIN_NAME)
  576.     rect = Rect.new(0, 0, 32, 32)
  577.     @pic_skin.bitmap.blt(0, 0, bitmap, rect)
  578.     rect = Rect.new(96, 0, 32, 32)
  579.     @pic_skin.bitmap.blt(self.width-32, 0, bitmap, rect)
  580.     rect = Rect.new(0, 96, 32, 32)
  581.     @pic_skin.bitmap.blt(0, self.height-32, bitmap, rect)
  582.     rect = Rect.new(96, 96, 32, 32)
  583.     @pic_skin.bitmap.blt(self.width-32, self.height-32, bitmap, rect)
  584.     rect = Rect.new(0, 32, 32, 32)
  585.     @pic_skin.bitmap.stretch_blt(Rect.new(0, 32, 32, self.height - 64), bitmap, rect)
  586.     rect = Rect.new(96, 32, 32, 32)
  587.     @pic_skin.bitmap.stretch_blt(Rect.new(self.width-32,32,32,self.height-64), bitmap, rect)
  588.     rect = Rect.new(32, 0, 32, 32)
  589.     @pic_skin.bitmap.stretch_blt(Rect.new(32,0,self.width-64,self.height-32), bitmap, rect)
  590.     # 如果尾巴在底端的话,更改底边描绘方式以修正阴影
  591.     if @message_position == 0 and @tale != nil
  592.       # 乱七八糟的三个计算变量
  593.       above_tale_x = @tale.x - self.x + 14
  594.       above_tale_width1 = @tale.x - self.x - 16 - 2
  595.       above_tale_width2 = self.width - above_tale_width1 - 32 - 64
  596.       # 中部(尾巴上方)
  597.       rect = Rect.new(32, 96, 32, 16)
  598.       @pic_skin.bitmap.stretch_blt(Rect.new(above_tale_x , self.height-32, 32, 24), bitmap, rect)
  599.       # 左半部
  600.       rect = Rect.new(32, 96, 32, 32)
  601.       @pic_skin.bitmap.stretch_blt(Rect.new(32, self.height-32, above_tale_width1, 32), bitmap, rect)
  602.       # 右半部
  603.       @pic_skin.bitmap.stretch_blt(Rect.new(32+above_tale_x, self.height-32, above_tale_width2, 32), bitmap, rect)
  604.       bitmap.dispose
  605.     else # 除此之外的情况保留原来的底边描绘方式
  606.       rect = Rect.new(32, 96, 32, 32)
  607.       @pic_skin.bitmap.stretch_blt(Rect.new(32,self.height-32,self.width-64,32), bitmap, rect)
  608.       bitmap.dispose
  609.     end
  610.   end
  611.   #--------------------------------------------------------------------------
  612.   # ○ 设置呼出对话框
  613.   #--------------------------------------------------------------------------
  614.   def set_fukidasi(x, y, width, height)
  615.     begin
  616.       self.pause = false # 不显示暂停标志
  617.       pos = get_fuki_pos(width, height) # 取得对话框位置
  618.       x = pos[0]
  619.       y = pos[1]
  620.       self.windowskin = RPG::Cache.windowskin($game_system.windowskin_name)
  621.       self.x = x
  622.       self.y = y
  623.       self.height = height
  624.       self.width = width
  625.       unless @no_term_stop
  626.         self.contents.dispose
  627.         self.contents = Bitmap.new(width - 32, height - 32)
  628.         self.back_opacity = Fuki_v6_Setup::FUKI_OPACITY
  629.         self.contents.clear
  630.         self.contents.font.color = Color.new(0, 0, 0, 255)
  631.         self.contents.font.size = Fuki_v6_Setup::MES_FONT_SIZE
  632.       end
  633.       if $game_system.message_frame == 0
  634.         tale_pos = get_tale_pos
  635.         @tale = Sprite.new
  636.         @tale.bitmap = Bitmap.new(64, 32)
  637.         if Fuki_v6_Setup::TAIL_SHOW
  638.           case @message_position
  639.           when 0  # 上
  640.             bitmap = RPG::Cache.windowskin(Fuki_v6_Setup::FUKI_SKIN_NAME)
  641.             rect = Rect.new(32, 32, 64, 32)
  642.             @tale.bitmap.blt(0, 0, bitmap, rect)
  643.             bitmap.dispose
  644.             @tale.x = tale_pos[0]
  645.             @tale.x += 8 if @tale.x < 64
  646.             if @tale.x > 640 - 64
  647.               @tale.mirror = true
  648.               @tale.x -= 64
  649.             end
  650.             @tale.y = tale_pos[1]
  651.             @tale.z = self.z + 1
  652.           when 1  # 中
  653.             @tale.dispose
  654.             @tale = nil
  655.           when 2  # 下
  656.             bitmap = RPG::Cache.windowskin(Fuki_v6_Setup::FUKI_SKIN_NAME)
  657.             rect = Rect.new(32, 64, 64, 32)
  658.             @tale.bitmap.blt(0, 0, bitmap, rect)
  659.             bitmap.dispose
  660.             @tale.x = tale_pos[0]
  661.             @tale.x += 8 if @tale.x < 64
  662.             if @tale.x > 640 - 64
  663.               @tale.mirror = true
  664.               @tale.x -= 64
  665.             end
  666.             @tale.y = tale_pos[1]
  667.             @tale.z = self.z# + 1
  668.           end
  669.         end
  670.       end
  671.     rescue
  672.       del_fukidasi
  673.       reset_window(width, height)
  674.     end
  675.   end
  676.   #--------------------------------------------------------------------------
  677.   # ○ 计算呼出对话框的位置
  678.   #--------------------------------------------------------------------------
  679.   def get_fuki_pos(width, height)
  680.     # 取得角色
  681.     [url=home.php?mod=space&uid=2631396]@character[/url] = get_character($mes_id)
  682.     if @character == nil
  683.       # 角色不存在的情况下使用默认信息框
  684.  
  685.       del_fukidasi
  686.       reset_window(width, height)
  687.       return
  688.     end
  689.     # 处理坐标
  690.     x = (@character.real_x - $game_map.display_x + 64) * 32 / 128 - (width / 2)
  691.     # 为尽量显示在画面内而移动横坐标
  692.     if x + width > 640
  693.       x = 640 - width
  694.     elsif x < 0
  695.       x = 0
  696.     end
  697.     # 决定窗口位置
  698.     case $game_system.message_position
  699.     when 0  # 上
  700.       y = (@character.real_y - $game_map.display_y + 64) * 32 / 128 - height - Fuki_v6_Setup::CHARACTOR_HEIGHT + Fuki_v6_Setup::POP_SHIFT_TOP
  701.     when 1  # 中
  702.       x = (640 - width) / 2
  703.       y = (480 - height) / 2
  704.     when 2  # 下
  705.       y =  (@character.real_y - $game_map.display_y + 64) * 32 / 128 + 32 + Fuki_v6_Setup::POP_SHIFT_UNDER
  706.     end
  707.     # 纪录文章显示位置
  708.     @message_position = $game_system.message_position
  709.     if Fuki_v6_Setup::POS_FIX
  710.       case @message_position
  711.       when 0  # 上
  712.         if y <= 0
  713.           @message_position = 2
  714.           y =  (@character.real_y - $game_map.display_y + 64) * 32 / 128 + 32 + Fuki_v6_Setup::POP_SHIFT_UNDER
  715.         end
  716.       when 2  # 下
  717.         if y + height >= 480
  718.           @message_position = 0
  719.           y = (@character.real_y - $game_map.display_y + 64) * 32 / 128 - height - Fuki_v6_Setup::CHARACTOR_HEIGHT + Fuki_v6_Setup::POP_SHIFT_TOP
  720.         end
  721.       end
  722.     end
  723.     return [x, y]
  724.   end
  725.   #--------------------------------------------------------------------------
  726.   # ○ 计算尾部图标的位置
  727.   #--------------------------------------------------------------------------
  728.   def get_tale_pos
  729.     case @message_position
  730.     when 0  # 上
  731.       # 处理坐标
  732.       x = ( @character.real_x - $game_map.display_x + 64 ) * 32 / 128 - 8
  733.       y = self.y + self.height - 6
  734.     when 1  # 中
  735.       x = nil
  736.       y = nil
  737.     when 2  # 下
  738.       # 处理坐标
  739.       x = ( @character.real_x - $game_map.display_x + 64 ) * 32 / 128 - 8
  740.       y = self.y - 18
  741.     end
  742.     return [x, y]
  743.   end
  744.   #--------------------------------------------------------------------------
  745.   # ○ 设置角色半身像窗口
  746.   #--------------------------------------------------------------------------
  747.   def draw_msg_face
  748.     @face_sprite.dispose if @face_sprite != nil
  749.     # $mes_name为空时不显示
  750.     if $mes_name == nil or $mes_name == ""
  751.       return
  752.     else
  753.       # 设定变量
  754.       mes_name = $mes_name
  755.       if $game_temp.namebmp[mes_name] == nil
  756.         sFile = Fuki_v6_Setup::FACE_PIC_DIR + mes_name
  757.       else
  758.         sFile = Fuki_v6_Setup::FACE_PIC_DIR + $game_temp.namebmp[mes_name]
  759.       end
  760.       bitmap = Bitmap.new(sFile)
  761.       @pic_width = bitmap.width
  762.       @pic_height = bitmap.height
  763.       @face_sprite = Sprite.new
  764.       @face_sprite.x = self.x + 26
  765.       @face_sprite.x = self.x + self.width - @pic_width - 26 if @show_right
  766.       @face_sprite.y = self.y + self.height - @pic_height - 6
  767.       @face_sprite.bitmap = bitmap
  768.       @face_sprite.z = self.z + 3
  769.       @face_sprite.mirror = @show_right
  770.       @face_sprite.opacity = 0
  771.     end
  772.   end
  773.   #--------------------------------------------------------------------------
  774.   # ○ 释放呼出对话框
  775.   #--------------------------------------------------------------------------
  776.   def del_fukidasi
  777.     self.opacity = 0
  778.     self.x = 80
  779.     self.width = 480
  780.     self.height = 160
  781.     self.contents.dispose
  782.     self.contents = Bitmap.new(width - 32, height - 32)
  783.     self.pause = true
  784.     if @tale != nil
  785.       @tale.dispose
  786.       @tale = nil
  787.     end
  788.   end
  789.   #--------------------------------------------------------------------------
  790.   # ○ 取得角色
  791.   #     parameter : 参数
  792.   #--------------------------------------------------------------------------
  793.   def get_character(parameter)
  794.     # 参数分歧
  795.     case parameter
  796.     when nil
  797.       return events == nil
  798.     when -1  # 玩家
  799.       return $game_player
  800.     when 0   # 该事件
  801.       events = $game_map.events
  802.       # 循环 (地图事件)
  803.       for event in $game_map.events.values
  804.         # 如果找到了启动中的事件
  805.         if event.starting
  806.           @event_id = event.id
  807.         end
  808.       end
  809.       return events == nil ? nil : events[@event_id]
  810.     else     # 特定事件
  811.       events = $game_map.events
  812.       return events == nil ? nil : events[parameter]
  813.     end
  814.   end
  815.   #--------------------------------------------------------------------------
  816.   # ● 设定窗口位置和不透明度
  817.   #--------------------------------------------------------------------------
  818.   def reset_window(width = nil, height = nil)
  819.     if $game_temp.in_battle
  820.       self.y = 16
  821.     else
  822.       case $game_system.message_position
  823.       when 0  # 上
  824.         self.y = 16
  825.       when 1  # 中
  826.         if height != nil and width != nil
  827.           self.y = (480 - height) / 2 - 32
  828.           self.x = (640 - width) / 2
  829.           self.width = width
  830.           self.height = height
  831.           self.contents.dispose
  832.           self.contents = Bitmap.new(width - 32, height - 32)
  833.         else
  834.           self.y = 160
  835.         end
  836.       when 2  # 下
  837.         self.y = 304
  838.       end
  839.     end
  840.     self.opacity = 0
  841.     self.back_opacity = Fuki_v6_Setup::MES_OPACITY
  842.   end
  843.   #--------------------------------------------------------------------------
  844.   # ● 刷新画面
  845.   #--------------------------------------------------------------------------
  846.   def update
  847.     if $tale_need_dispose
  848.       del_fukidasi
  849.       $tale_need_dispose = false
  850.     end
  851.     super
  852.     update_fuki                 # 呼出模式下跟随事件移动
  853.     if @fade_in                 # 渐变的情况下
  854.       self.contents_opacity += 24
  855.       @pic_skin.opacity += 20 if $game_system.message_frame == 0
  856.       if @tale != nil
  857.         @face_sprite.opacity += 24 if @face_sprite != nil and !@face_sprite.disposed?
  858.         @tale.opacity += 20
  859.       end
  860.       @input_number_window.contents_opacity += 24 if @input_number_window != nil
  861.       @fade_in = false if self.contents_opacity == 255
  862.       return
  863.     end
  864.     if @contents_drawing        # 显示信息中的情况下
  865.       refresh_drawtext
  866.       return
  867.     end
  868.     update_input_number_window  # 输入数值的情况下
  869.     if @contents_showing_end    # 显示信息结束的情况下
  870.       if $game_temp.choice_max == 0 and @tale == nil
  871.         self.pause = true
  872.       else
  873.         self.pause = false
  874.       end
  875.       update_choose
  876.       return
  877.     end
  878.     if @fade_out == false and $game_temp.message_text != nil # 在渐变以外的状态下
  879.       @contents_showing = true
  880.       $game_temp.message_window_showing = true
  881.       reset_window
  882.       refresh_create
  883.       if @no_term_stop
  884.         self.visible = true        
  885.       else
  886.         @tale.opacity = 0 if @tale != nil
  887.         Graphics.frame_reset
  888.         self.visible = true
  889.         self.contents_opacity = 0
  890.         @input_number_window.contents_opacity = 0 if @input_number_window != nil
  891.         @fade_in = true
  892.       end
  893.       return
  894.     end
  895.     unless @no_term_stop # 没有可以显示的信息、但是窗口为可见的情况下
  896.       if self.visible
  897.         @fade_out = true
  898.         self.opacity -= 48
  899.         @face_sprite.opacity -= 48 if @face_sprite != nil and !@face_sprite.disposed?
  900.         @pic_skin.opacity -= 48 if @pic_skin != nil and !@pic_skin.disposed?
  901.         @tale.opacity -= 48 if @tale != nil and !@tale.disposed?
  902.         if (@face_sprite == nil) or @face_sprite.disposed? or (@face_sprite.opacity == 0)
  903.           self.visible = false
  904.           @face_sprite.dispose if @face_sprite != nil
  905.           @pic_skin.dispose
  906.           @fade_out = false
  907.           $game_temp.message_window_showing = false
  908.         end
  909.         return
  910.       end
  911.     else
  912.       $game_temp.message_window_showing = false   
  913.     end
  914.   end
  915.   #--------------------------------------------------------------------------
  916.   # ● 释放
  917.   #--------------------------------------------------------------------------
  918.   def dispose
  919.     terminate_message
  920.     $game_temp.message_window_showing = false
  921.     @input_number_window.dispose if @input_number_window != nil
  922.     super
  923.   end
  924.   #--------------------------------------------------------------------------
  925.   # ● 信息结束处理
  926.   #--------------------------------------------------------------------------
  927.   def terminate_message
  928.     self.active = false
  929.     self.pause = false
  930.     self.index = -1
  931.     self.contents.clear
  932.     # 清除显示中标志
  933.     @contents_showing = false
  934.     @contents_showing_end = false
  935.     $mes_name = ""
  936.     # 呼叫信息调用
  937.     $game_temp.message_proc.call if $game_temp.message_proc != nil
  938.     # 清除文章、选择项、输入数值的相关变量
  939.     $game_temp.message_text = nil
  940.     $game_temp.message_proc = nil
  941.     $game_temp.choice_start = 99
  942.     $game_temp.choice_max = 0
  943.     $game_temp.choice_cancel_type = 0
  944.     $game_temp.choice_proc = nil
  945.     $game_temp.num_input_start = 99
  946.     $game_temp.num_input_variable_id = 0
  947.     $game_temp.num_input_digits_max = 0
  948.     # 释放金钱窗口
  949.     if @gold_window != nil
  950.       @gold_window.dispose
  951.       @gold_window = nil
  952.     end
  953.     @no_term_stop = false
  954.     @save_x = 0
  955.     @save_y = 0
  956.     @show_right = false
  957.     @show_name  = false
  958.     @face_width = 0
  959.     $tale_need_dispose = true if @tale != nil
  960.   end
  961.   #--------------------------------------------------------------------------
  962.   # ● ★信息结束处理★
  963.   #--------------------------------------------------------------------------
  964.   def terminate_messageX
  965.     self.active = false
  966.     self.pause = false
  967.     self.index = -1
  968.     # 清除显示中标志
  969.     @contents_showing = false
  970.     @contents_showing_end = false
  971.     # 呼叫信息调用
  972.     $game_temp.message_proc.call if $game_temp.message_proc != nil
  973.     # 清除文章、选择项、输入数值的相关变量
  974.     $game_temp.message_text = nil
  975.     $game_temp.message_proc = nil
  976.     @no_term_stop = true
  977.     @show_right = false
  978.     @show_name  = false
  979.     @face_width = 0
  980.   end
  981.   #--------------------------------------------------------------------------
  982.   # ● 刷新光标矩形
  983.   #--------------------------------------------------------------------------
  984.   def update_cursor_rect
  985.     if @index >= 0
  986.       n = $game_temp.choice_start + @index
  987.       self.cursor_rect.set(Fuki_v6_Setup::MES_FONT_SIZE / 2, n * (Fuki_v6_Setup::MES_FONT_SIZE + 4), @cursor_width, Fuki_v6_Setup::MES_FONT_SIZE + 4)
  988.       self.cursor_rect.x += @face_width unless @show_right
  989.       self.cursor_rect.x += Fuki_v6_Setup::MES_FONT_SIZE / 2 if @show_name
  990.     else
  991.       self.cursor_rect.empty
  992.     end
  993.   end
  994.   #--------------------------------------------------------------------------
  995.   # ● 获取文字颜色色
  996.   #     n : 文字颜色编号 (0~31)
  997.   #--------------------------------------------------------------------------
  998.   def text_color(n)
  999.     return normal_color if n > 31
  1000.     x = (n % 8) * 16
  1001.     y = 128 + (n / 8) * 16
  1002.     return RPG::Cache.windowskin(Fuki_v6_Setup::FUKI_SKIN_NAME).get_pixel(x, y)
  1003.   end
  1004.   #--------------------------------------------------------------------------
  1005.   # ● 取得普通文字色
  1006.   #--------------------------------------------------------------------------
  1007.   def normal_color
  1008.     nil_color = Color.new(0,0,0,255)
  1009.     return Fuki_v6_Setup::FUKI_COLOR if Fuki_v6_Setup::FUKI_COLOR != nil_color
  1010.     return nil_color
  1011.   end
  1012.   #--------------------------------------------------------------------------
  1013.   # ● 获取头像宽度
  1014.   #--------------------------------------------------------------------------
  1015.   def get_face_width(face_name)
  1016.     return if $mes_name == ""
  1017.     filename = Fuki_v6_Setup::FACE_PIC_DIR + face_name
  1018.     bitmap = Bitmap.new(filename)
  1019.     @face_width = bitmap.width + Fuki_v6_Setup::MES_FONT_SIZE
  1020.     bitmap.dispose
  1021.   end
  1022.   #--------------------------------------------------------------------------
  1023.   # ● 描绘物品
  1024.   #     item : 物品
  1025.   #--------------------------------------------------------------------------
  1026.   def draw_icon(item, x, y)
  1027.     return if item == nil
  1028.     bitmap = RPG::Cache.icon(item.icon_name)
  1029.     self.contents.blt(x + 4, y, bitmap, Rect.new(0, 0, 24, 24))
  1030.     color = self.contents.font.color.clone
  1031.     self.contents.font.color = text_color(1)
  1032.     self.contents.draw_text(x + 28, y, self.contents.text_size(item.name).width + 5, 24, item.name)
  1033.     self.contents.font.color = color
  1034.     @dx += self.contents.text_size(item.name).width
  1035.   end
  1036.   #--------------------------------------------------------------------------
  1037.   # ● 图形的描绘
  1038.   #     actor : 角色
  1039.   #     x     : 描画目标 X 坐标
  1040.   #     y     : 描画目标 Y 坐标
  1041.   #--------------------------------------------------------------------------
  1042.   def draw_actor_graphic(actor, x, y)
  1043.     bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
  1044.     cw = bitmap.width / 4
  1045.     ch = bitmap.height / 4
  1046.     src_rect = Rect.new(0, 0, cw, ch)
  1047.     self.contents.blt(x, y - 4, bitmap, src_rect)
  1048.     color = self.contents.font.color.clone
  1049.     self.contents.font.color = text_color(1)
  1050.     self.contents.draw_text(x + 32, y, self.contents.text_size(actor.name).width + 5, 24, actor.name)
  1051.     self.contents.font.color = color
  1052.     @dx += self.contents.text_size(actor.name).width
  1053.   end
  1054.   #--------------------------------------------------------------------------
  1055.   # ● 刷新呼出对话框
  1056.   #--------------------------------------------------------------------------
  1057.   def update_fuki
  1058.     if @tale != nil
  1059.       pos = get_fuki_pos(self.width, self.height)
  1060.       self.x = pos[0]
  1061.       self.y = pos[1]
  1062.       tale_pos = get_tale_pos
  1063.       @tale.mirror = false
  1064.       @tale.x = tale_pos[0]
  1065.       @tale.x += 8 if @tale.x < 64
  1066.       if @tale.x > 640 - 64
  1067.         @tale.mirror = true
  1068.         @tale.x -= 64
  1069.       end
  1070.       @tale.y = tale_pos[1]
  1071.       @pic_skin.x = self.x + 2
  1072.       @pic_skin.y = self.y + 2
  1073.       if @face_sprite != nil and !@face_sprite.disposed?
  1074.         @face_sprite.x = self.x + 26
  1075.         @face_sprite.x = self.x + self.width - @pic_width - 26 if @show_right
  1076.         @face_sprite.y = self.y + self.height - @pic_height - 6
  1077.       end
  1078.     end
  1079.   end
  1080.   #--------------------------------------------------------------------------
  1081.   # ● 刷新数字输入框
  1082.   #--------------------------------------------------------------------------
  1083.   def update_input_number_window
  1084.     if @input_number_window != nil
  1085.       @input_number_window.update
  1086.       # 确定
  1087.       if Input.trigger?(Input::C)
  1088.         $game_system.se_play($data_system.decision_se)
  1089.         $game_variables[$game_temp.num_input_variable_id] = @input_number_window.number
  1090.         # 释放输入数值窗口
  1091.         @input_number_window.dispose
  1092.         @input_number_window = nil
  1093.         $game_map.need_refresh = true
  1094.         terminate_message
  1095.       end
  1096.       return
  1097.     end
  1098.   end
  1099.   #--------------------------------------------------------------------------
  1100.   # ● 刷新选择输入
  1101.   #--------------------------------------------------------------------------
  1102.   def update_choose
  1103.     if Input.trigger?(Input::B)
  1104.       if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
  1105.         $game_system.se_play($data_system.cancel_se)
  1106.         $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
  1107.         terminate_message
  1108.       end
  1109.     end
  1110.     if Input.trigger?(Input::C)
  1111.       if $game_temp.choice_max > 0
  1112.         $game_system.se_play($data_system.decision_se)
  1113.         $game_temp.choice_proc.call(self.index)
  1114.       end
  1115.       terminate_message
  1116.     end
  1117.   end
  1118. end


作者: 恐惧剑刃    时间: 2014-8-5 11:28
本帖最后由 恐惧剑刃 于 2014-8-5 11:36 编辑

数据还没有初始化就开始玩开关必然报错……

两较简单的方法——

比如把 Window_Message 改为 FUKI_Window_Message
在地图场景生成两个信息框,通过开关判断用那一个信息框。

还是给改个名称 比如 FUKI_Window_Message 而且是 Window_Message 的子类
只要是Window_Message中出现的方法,全部通过开关控制,如果要用默认的对话框super终止处理就好了。


作者: 牛肉面    时间: 2014-8-5 11:57
#  10. $mes_id = 0          代表本事件
#      $mes_id = -1         代表主角
#      $mes_id = 其他数值   代表事件编号
#      $mes_id = nil        代表不使用fuki形式
作者: 哆啦溯    时间: 2014-8-5 17:01
本帖最后由 哆啦溯 于 2014-8-5 17:30 编辑
恐惧剑刃 发表于 2014-8-5 11:28
数据还没有初始化就开始玩开关必然报错……

两较简单的方法——


恩……有两个问题,
一是把Window_Message改掉了,接着该怎么做……= =(改了之后Fuki对话框直接没了,如何用开关控制?)
二是:【物品得失】这个脚本里面也是在最开始定义的开关,怎么又没错呢(而且看这个脚本的样子貌似很简单的样子)
作者: 573932914    时间: 2014-8-5 22:03
$mes_id = nil  
解释有写啊
作者: 哆啦溯    时间: 2014-8-6 09:50
@无忧谷主幻 你别点评啊,我没办法回复你了
话说连$mes_id = nil 都不知道= =?你没看过脚本吗
作者: 无忧谷主幻    时间: 2014-8-6 11:03
哆啦溯 发表于 2014-8-6 09:50
@无忧谷主幻 你别点评啊,我没办法回复你了
话说连$mes_id = nil 都不知道= =?你没看过脚本吗  ...

哪能全部记住
而且加了有什么用,和没加一个样子
最主要的是隐藏对话框啊!!!
作者: 573932914    时间: 2014-8-6 23:05
那就在判断开关的时候,如果开关没打开,则将原本的文章脚本粘进开关关闭的场合
作者: RyanBern    时间: 2014-8-7 09:56
先重申一下LZ要问的问题,LZ要问的问题是,怎么样用一个开关控制FUKI脚本的打开和关闭。比方说关闭5号开关时,FUKI脚本正常运行,打开5号开关时,使用默认的对话框,就好像FUKI脚本没有插入一样。就这样看来,LS的几个回答除了恐惧剑刃的以外,都有问题。
然后再解释一下为什么LZ提出的方案不可以。这是因为“开关”这一事物出现在游戏读档之后(即进入地图之后),进入标题画面是没有开关的。所以不能用开关控制。再退一步讲,即使用开关控制,那也只是控制了一个编译的过程,我们不希望FUKI脚本不经过编译,那样在游戏中FUKI脚本就根本不存在了。因此这并不是一个解决问题的方法。
所以最简单的方法应该像恐惧剑刃说的那样,保留两个Window_Message,给系统原来的Window_Message改名为Window_Message_A,其它的不用变。然后在Scene_Map里控制到底该用哪个窗口,找到下面一句:
  1. @message_window = Window_Message.new
复制代码
替换成下面的:
  1. if $game_switches[$开关]
  2.   @message_window = Window_Message_A.new
  3. else
  4.   @message_window = Window_Message.new
  5. end
复制代码
然后注意到FUKI脚本重新定义了Window_InputNumber,所以也要把默认Window_InputNumber修改一下。不过Window_InputNumber不在Scene_Map中生成,而是在Window_Message_A里面生成,在Window_Message_A里面找到下面一句:
  1. @input_number_window = Window_InputNumber.new(digits_max)
复制代码
和Window_Message_A一样,利用开关判断然后替换即可。

不过还有一个问题,就是这样修改的话,只有退出地图(比方说进入菜单),然后再进入地图后,修改才可以生效,没有实时性。因此有必要进行如下更改来增强实时性:
首先在Scene_Map里面添加一个实变量@fuki_disabled,并将其初始化为$game_switches[$开关]
然后在update最前面添加如下脚本:
  1. if @fuki_disabled != $game_switches[$开关]
  2.   @fuki_disabled = $game_switches[$开关]
  3.   @message_window.dispose
  4.   @message_window = @fuki_disabled ? Window_Message_A.new : Window_Message.new
  5. end
复制代码

作者: 哆啦溯    时间: 2014-8-7 15:24
RyanBern 发表于 2014-8-7 09:56
先重申一下LZ要问的问题,LZ要问的问题是,怎么样用一个开关控制FUKI脚本的打开和关闭。比方说关闭5号开关 ...

谢谢大神用心的回复。理解了一下你说的话
是不是,给系统原来的Window_InputNumber改名为Window_InputNumber_A
然后将
RUBY 代码复制
  1. @input_number_window = Window_InputNumber.new(digits_max)

替换为
RUBY 代码复制
  1. if $game_switches[$开关]
  2.   @input_number_window = Window_InputNumber_A.new(digits_max)
  3. else
  4.   @input_number_window = Window_InputNumber.new(digits_max)
  5. end



另外
如何“在Scene_Map里面添加一个实变量@fuki_disabled,并将其初始化为$game_switches[$开关]”?不懂操作...
作者: 哆啦溯    时间: 2014-8-7 21:32
RyanBern 发表于 2014-8-7 09:56
先重申一下LZ要问的问题,LZ要问的问题是,怎么样用一个开关控制FUKI脚本的打开和关闭。比方说关闭5号开关 ...

恩……
在Scene_Map的何处插入“@fuki_disabled = $game_switches[$开关]”这一段?
“在update最前面添加如下脚本”是Scene_Map里面的
RUBY 代码复制
  1. # 刷新游戏画面
  2.       Graphics.update
  3.       # 刷新输入信息
  4.       Input.update
  5.       # 刷新画面
  6.       update

之前加吗?变成这样?
RUBY 代码复制
  1. # 主循环
  2.     loop do
  3.       if @fuki_disabled != $game_switches[$开关]
  4.         @fuki_disabled = $game_switches[$开关]
  5.         @message_window.dispose
  6.         @message_window = @fuki_disabled ? Window_Message_A.new : Window_Message.new
  7.       end
  8.       # 刷新游戏画面
  9.       Graphics.update
  10.       # 刷新输入信息
  11.       Input.update
  12.       # 刷新画面
  13.       update


对不起理解力不好{:2_264:}
作者: RyanBern    时间: 2014-8-7 22:01
哆啦溯 发表于 2014-8-7 21:32
恩……
在Scene_Map的何处插入“@fuki_disabled = $game_switches[$开关]”这一段?
“在update最前面添 ...

第一个问题,紧跟在在def main就行。
第二个问题,我还是别手把手教了,直接上脚本吧。其实就是重新定义update
  1. alias old_update update
  2. def update
  3.   if @fuki_disabled != $game_switches[$开关]
  4.     @fuki_disabled = $game_switches[$开关]
  5.     @message_window.dispose
  6.     @message_window = @fuki_disabled ? Window_Message_A.new : Window_Message.new
  7.   end
  8.   old_update
  9. end
复制代码

作者: 哆啦溯    时间: 2014-8-7 22:31
RyanBern 发表于 2014-8-7 22:01
第一个问题,紧跟在在def main就行。
第二个问题,我还是别手把手教了,直接上脚本吧。其实就是重新定义u ...

唔……我按照你说的进行了设置

1.png (2.04 KB, 下载次数: 23)

第一步设置

第一步设置

2.png (9.47 KB, 下载次数: 18)

2.png

3.png (1.98 KB, 下载次数: 18)

第三部设置

第三部设置

4.png (9.6 KB, 下载次数: 20)

4.png

6.png (1.21 KB, 下载次数: 13)

6.png

作者: 573932914    时间: 2014-8-7 22:55
if 开关开了
FUKI脚本
else
默认脚本
end
作者: 哆啦溯    时间: 2014-8-8 08:35
RyanBern 发表于 2014-8-7 22:01
第一个问题,紧跟在在def main就行。
第二个问题,我还是别手把手教了,直接上脚本吧。其实就是重新定义u ...

请不要放弃我= =

1.png (10.3 KB, 下载次数: 17)

1.png

3.png (1.23 KB, 下载次数: 16)

3.png

4.png (3.78 KB, 下载次数: 16)

4.png





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1