仙剑之十里坡

标题: [6r教程整理]对话框加强脚本 [打印本页]

作者: 最爱南宫煌    时间: 2010-7-6 22:40
标题: [6r教程整理]对话框加强脚本
  1. #\a[n] : n帧之后自动关闭对话框
  2. #\b: Banner mode. 文字将显示在对话框的正中间(横竖都是中间)。不能与其他类似功能同用(柳柳按:没什么用处的功能,中文不需要这么排版)
  3. #\c[n] 改变为第n种颜色. 使用\d或者\c[0]回复正常颜色。
  4. #\d: 回复默认字体、大小、颜色、高度。
  5. #\f[n] : 改变为第n种字体,使用\d回复默认字体。
  6. #\g : 显示金钱窗口
  7. #\h[n] : 改变文字的字沉高度,使用\d或\h[32]回复默认状态(柳柳按:这个功能没什么用处)
  8. #\j[n] : 显示n象素的空白(柳柳按:对于中文而言无用的功能)
  9. #\i[n] : 显示第n号物品的图标和名称
  10. #\k[n] : 显示第n号特技的图标和名称.
  11. #\m[n] : 显示第n号防具的图标和名称.
  12. #\w[n] : 显示第n号武器的图标和名称.
  13. #\n[n] : 显示第n号英雄名称(柳柳按:就是默认功能).
  14. #\o[n] : 更改文字的透明度为n.
  15. #\r: 右对齐(柳柳按:比较不实用).  
  16. #\s[n] : 更改字体大小(柳柳按:不要改得太大,否则会出格,会变丑的^__^).
  17. #\v[n] : 显示第n号变量的数值.
  18. #\x: 居中对齐,必须在一行的开头用(柳柳按:比较不实用。其实这些排版功能不如打几个空格).
  19. #\\ : 显示"\"这个符号.
  20. class Window_Message < Window_Selectable
  21.   attr_accessor :autoclosetime
  22.   attr_accessor :op
  23. # ----------------------------
  24.   def initialize
  25.     super(80, 304, 480, 160)
  26.     self.contents = Bitmap.new(width - 32, height - 32)
  27.     self.visible = false
  28.     self.z = 9998
  29.     @fade_in = false
  30.     @fade_out = false
  31.     @contents_showing = false
  32.     @cursor_width = 0
  33.     @autoclosetime = -1
  34.     @op = 255
  35.     @refreshflag = false
  36.     self.active = false
  37.     self.index = -1
  38.   end
  39. # ----------------------------
  40.   def dispose
  41.     terminate_message
  42.     $game_temp.message_window_showing = false
  43.     if @input_number_window != nil
  44.       @input_number_window.dispose
  45.     end
  46.     super
  47.   end
  48. # ----------------------------
  49.   def terminate_message
  50.     self.active = false
  51.     self.pause = false
  52.     self.index = -1
  53.     self.contents.clear
  54.     @contents_showing = false
  55.     if $game_temp.message_proc != nil
  56.       $game_temp.message_proc.call
  57.     end
  58.     $game_temp.message_text = nil
  59.     $game_temp.message_proc = nil
  60.     $game_temp.choice_start = 99
  61.     $game_temp.choice_max = 0
  62.     $game_temp.choice_cancel_type = 0
  63.     $game_temp.choice_proc = nil
  64.     $game_temp.num_input_start = 99
  65.     $game_temp.num_input_variable_id = 0
  66.     $game_temp.num_input_digits_max = 0
  67.     if @gold_window != nil
  68.       @gold_window.dispose
  69.       @gold_window = nil
  70.     end
  71.   end
  72. # ----------------------------
  73.   def refresh
  74.     self.contents.clear
  75.     self.contents.font.color = normal_color
  76.     self.contents.font.name = "宋体"
  77.     self.contents.font.size = 18
  78.     x = y = 0
  79.     @cursor_width = 0
  80.     @autoclosetime = -1
  81.     @refreshflag = true
  82.     lineheight = 32
  83.     active = ""
  84.     a = ""
  85.     centerflag = false
  86.     rightflag = false
  87.     bannerflag = false
  88.     if $game_temp.choice_start == 0
  89.       x = 8
  90.     end
  91.     if $game_temp.message_text != nil
  92.       text = $game_temp.message_text
  93.       begin
  94.       last_text = text.clone
  95.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  96.       end until text == last_text
  97.       text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  98.    $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  99.       end
  100.       text.gsub!(/\\\\/) { "\000" }
  101.       text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  102.       text.gsub!(/\\[Gg]/) { "\002" }
  103.       text.gsub!(/\\[Ii]\[([0-9]+)\]/) { "\003[#{$1}]" }
  104.       text.gsub!(/\\[Ff]\[([0-9]+)\]/) { "\004[#{$1}]" }
  105.       text.gsub!(/\\[Aa]\[([0-9]+)\]/) { "\005[#{$1}]" }
  106.       text.gsub!(/\\[Xx]/) { "\006" }
  107.       text.gsub!(/\\[Rr]/) { "\007" }
  108.       text.gsub!(/\\[Dd]/) { "\011" }
  109.       text.gsub!(/\\[Ss]\[([0-9]+)\]/) { "\023[#{$1}]" }
  110.       text.gsub!(/\\[Bb]/) { "\017" }
  111.       text.gsub!(/\\[Ww]\[([0-9]+)\]/) { "\014[#{$1}]" }
  112.       text.gsub!(/\\[Mm]\[([0-9]+)\]/) { "\015[#{$1}]" }
  113.       text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "\016[#{$1}]" }
  114.       text.gsub!(/\\[Jj]\[([0-9]+)\]/) { "\013[#{$1}]" }
  115.       text.gsub!(/\\[Hh]\[([0-9]+)\]/) { "\021[#{$1}]" }
  116.       text.gsub!(/\\[Kk]\[([0-9]+)\]/) { "\022[#{$1}]" }
  117.       while ((c = text.slice!(/./m)) != nil)
  118.         if c == "\000"
  119.           c = "\\"
  120.         end
  121.         if c == "\001"
  122.           text.sub!(/\[([0-9]+)\]/, "")
  123.           color = $1.to_i
  124.           if color >= 0 and color <= 7
  125.             self.contents.font.color = text_color(color)
  126.           end
  127.           next
  128.         end
  129.         if c == "\002"
  130.           if @gold_window == nil
  131.             @gold_window = Window_Gold.new
  132.             @gold_window.x = 560 - @gold_window.width
  133.             if $game_temp.in_battle
  134.               @gold_window.y = 192
  135.             else
  136.               @gold_window.y = self.y >= 128 ? 32 : 384
  137.             end
  138.             @gold_window.opacity = self.opacity
  139.             @gold_window.back_opacity = self.back_opacity
  140.           end
  141.           next
  142.         end
  143.           if c == "\003"
  144.           text.sub!(/\[([0-9]+)\]/, "")
  145.           item_sub = $1.to_i
  146.           c = $data_items[item_sub].name
  147.           l = self.contents.text_size&copy;.width
  148.           draw_item_name($data_items[item_sub], x, y * 32 + 1)
  149.           x = x + l + 24
  150.           next
  151.         end
  152.          if c == "\004"
  153.           text.sub!(/\[([0-9]+)\]/, "")
  154.           fontize = $1.to_i
  155.           case fontize
  156.             when 1  
  157.               self.contents.font.name = "黑体"
  158.             when 2  
  159.               self.contents.font.name = "宋体"
  160.             when 3  
  161.               self.contents.font.name = "隶书"
  162.             when 4  
  163.               self.contents.font.name = "幼圆"
  164.           end
  165.           next
  166.         end
  167.          if c == "\005"
  168.           text.sub!(/\[([0-9]+)\]/, "")
  169.           @autoclosetime = $1.to_i
  170.           next
  171.         end
  172.         if c == "\006"
  173.           centerflag = true
  174.           next
  175.         end
  176.         if c == "\007"
  177.           rightflag = true
  178.           next
  179.         end
  180.         if c == "\011"
  181.           self.contents.font.name = "Arial"
  182.           self.contents.font.size = 18
  183.           self.contents.font.color = normal_color
  184.           lineheight = 32
  185.           next
  186.         end
  187.         if c == "\014"
  188.           text.sub!(/\[([0-9]+)\]/, "")
  189. w_sub = $1.to_i
  190.           c = $data_weapons[w_sub].name
  191.           l = self.contents.text_size&copy;.width
  192.           bitmap = RPG::Cache.icon($data_weapons[w_sub].icon_name)
  193.           self.contents.blt(x+4, y * 32+ 4, bitmap, Rect.new(0, 0, 24, 24))
  194.           x += 28
  195.           self.contents.draw_text(x+4, 32 * y, l+32, lineheight, c)
  196.           x = x + l
  197.           next
  198.         end

复制代码

作者: 最爱南宫煌    时间: 2010-7-6 22:40
  1.           if c == "\015"
  2.           text.sub!(/\[([0-9]+)\]/, "")
  3.           a_sub = $1.to_i
  4.           c = $data_armors[a_sub].name
  5.           l = self.contents.text_size&copy;.width
  6.           bitmap = RPG::Cache.icon($data_armors[a_sub].icon_name)
  7.           self.contents.blt(x+4, y * 32+ 4, bitmap, Rect.new(0, 0, 24, 24))
  8.           x += 28
  9.           self.contents.draw_text(x+4, 32 * y, l+32, lineheight, c)
  10.           x = x + l
  11.           next
  12.         end
  13.           if c == "\016"
  14.           text.sub!(/\[([0-9]+)\]/, "")
  15.           @op = $1.to_i
  16.           next
  17.         end
  18.          if c == "\017"
  19.           bannerflag = true
  20.           next
  21.         end
  22.         if c == "\018"
  23.           text.sub!(/\[([0-9]+)\]/, "")
  24.           jump = $1.to_i        
  25.           x += jump
  26.           next
  27.         end
  28.           if c == "\021"
  29.           text.sub!(/\[([0-9]+)\]/, "")
  30.           lineheight = $1.to_i
  31.           next
  32.         end
  33.         if c == "\022"
  34.           text.sub!(/\[([0-9]+)\]/, "")
  35.           skill_sub = $1.to_i
  36.           c = $data_skills[skill_sub].name
  37.           l = self.contents.text_size&copy;.width
  38.           bitmap = RPG::Cache.icon($data_skills[skill_sub].icon_name)
  39.           self.contents.blt(x+4, y * 32+ 4, bitmap, Rect.new(0, 0, 24, 24))
  40.           x += 28
  41.           self.contents.draw_text(x+4, 32 * y, l+32, lineheight, c)
  42.           x = x + l
  43.           next
  44.         end
  45.          if c == "\023"
  46.           text.sub!(/\[([0-9]+)\]/, "")
  47.           bigness = $1.to_i
  48.           self.contents.font.size = bigness
  49.           next
  50.         end
  51.         if c == "\n"
  52.           if centerflag == true
  53.             x = 448 - x
  54.             x = x / 2
  55.             self.contents.draw_text(x, 32 * y, 448-x, lineheight, a)
  56.           end
  57.           if rightflag == true
  58.             x = 448 - x
  59.             self.contents.draw_text(x, 32 * y, 448-x, lineheight, a)
  60.           end
  61.           if bannerflag == true
  62.             x = 448 - x
  63.             x = x / 2
  64.             self.contents.draw_text(x, 44, 448-x, lineheight, a)
  65.           end
  66.           a = ""
  67.           centerflag = false
  68.           rightflag = false
  69.           bannerflag = false
  70.           if y >= $game_temp.choice_start
  71.             @cursor_width = [@cursor_width, x].max
  72.           end
  73.           y += 1
  74.           x = 0
  75.           if y >= $game_temp.choice_start
  76.             x = 8
  77.           end
  78.           next
  79.         end
  80.         if centerflag == false && rightflag == false && bannerflag == false
  81.         self.contents.draw_text(4 + x, 32 * y, 40, lineheight, c)
  82.         x += self.contents.text_size&copy;.width
  83.       else
  84.         a += c
  85.         x += self.contents.text_size&copy;.width
  86. 4楼

  87.         end
  88.       end
  89.     end
  90.     if $game_temp.choice_max > 0
  91.       @item_max = $game_temp.choice_max
  92.       self.active = true
  93.       self.index = 0
  94.     end
  95.     if $game_temp.num_input_variable_id > 0
  96.       digits_max = $game_temp.num_input_digits_max
  97.       number = $game_variables[$game_temp.num_input_variable_id]
  98.       @input_number_window = Window_InputNumber.new(digits_max)
  99.       @input_number_window.number = number
  100.       @input_number_window.x = self.x + 8
  101.       @input_number_window.y = self.y + $game_temp.num_input_start * 32
  102.     end
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 设置窗口位置与不透明度
  106.   #--------------------------------------------------------------------------
  107.   def reset_window
  108.     if $game_temp.in_battle
  109.       self.y = 16
  110.     else
  111.       case $game_system.message_position
  112.       when 0  # 上
  113.         self.y = 16
  114.       when 1  # 中
  115.         self.y = 160
  116.       when 2  # 下
  117.         case $msr
  118.         when 0
  119.           self.y = 304
  120.         when 1
  121.           self.y =  
  122.       when 999  #自制对话框
  123.         self.x=180
  124.         self.y=306
  125.         self.width = 440
  126.         self.height = 160
  127.         self.opacity=0
  128.         self.back_opacity=0
  129.         self.contents = Bitmap.new(width - 32, height - 32)
  130.       end
  131.     end
  132.     if $game_system.message_frame == 0
  133.       self.opacity = 255
  134.     else
  135.       self.opacity = 0
  136.     end
  137.     self.back_opacity = 160
  138.   end
  139. # ----------------------------   
  140.   def update
  141.     super
  142.     if @refreshflag && @fade_in == false
  143.       self.contents_opacity = @op
  144.      end
  145.     if @autoclosetime == 0
  146.     @autoclosetime = -1
  147.      terminate_message
  148.    end
  149.     if @autoclosetime >= 1
  150.     @autoclosetime -= 1
  151.     end
  152.     if @fade_in
  153.       self.contents_opacity += 24
  154.       if @input_number_window != nil
  155.         @input_number_window.contents_opacity += 24
  156.       end
  157.       if self.contents_opacity >= @op
  158.         @fade_in = false
  159.       end
  160.       return
  161.     end
  162.     if @input_number_window != nil
  163.       @input_number_window.update
  164.       if Input.trigger?(Input::C)
  165.         $game_system.se_play($data_system.decision_se)
  166.         $game_variables[$game_temp.num_input_variable_id] =
  167.           @input_number_window.number
  168.         $game_map.need_refresh = true
  169.         @input_number_window.dispose
  170.         @input_number_window = nil
  171.         terminate_message
  172.       end
  173.       return
  174.     end
  175.     if @contents_showing
  176.       if $game_temp.choice_max == 0
  177.         self.pause = true
  178.       end
  179.       if Input.trigger?(Input::B)
  180.         if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
  181.           $game_system.se_play($data_system.cancel_se)
  182.           $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
  183.           terminate_message
  184.         end
  185.       end
  186.       if Input.trigger?(Input::C)
  187.         if $game_temp.choice_max > 0
  188.           $game_system.se_play($data_system.decision_se)
  189.           $game_temp.choice_proc.call(self.index)
  190.         end
  191.         @op = 255
  192.         terminate_message
  193.       end
  194.       return
  195.     end
  196.     if @fade_out == false and $game_temp.message_text != nil
  197.       @contents_showing = true
  198.       $game_temp.message_window_showing = true
  199.       reset_window
  200.       refresh
  201.       Graphics.frame_reset
  202.       self.visible = true
  203.       self.contents_opacity = 0
  204.       if @input_number_window != nil
  205.         @input_number_window.contents_opacity = 0
  206.       end
  207.       @fade_in = true
  208.       return
  209.     end
  210.     if self.visible
  211.       @fade_out = true
  212.       self.opacity -= 48
  213.       if self.opacity == 0
  214.         self.visible = false
  215.         @fade_out = false
  216.         $game_temp.message_window_showing = false
  217.       end
  218.       return
  219.     end
  220.   end
  221. # ----------------------------
  222.   def update_cursor_rect
  223.     if @index >= 0
  224.       n = $game_temp.choice_start + @index
  225.       self.cursor_rect.set(8, n * 32, @cursor_width, 32)
  226.     else
  227.       self.cursor_rect.empty
  228.     end
  229.   end
  230. end
复制代码

作者: BlackFeather    时间: 2010-7-9 16:35
恭喜,我找到这个脚本会出错的地方了!
作者: 最爱南宫煌    时间: 2010-7-10 14:27
说说啊。
作者: BlackFeather    时间: 2010-7-10 14:29
让要用的人自己找吧……
作者: 最爱南宫煌    时间: 2010-7-10 14:39
反正我不用,我只是发脚本的。
作者: BlackFeather    时间: 2010-7-10 14:41
其实拿到脚本后看一遍,基本上都能找出
作者: 最爱南宫煌    时间: 2010-7-16 18:56
本帖最后由 最爱南宫煌 于 2010-7-16 18:59 编辑

- -由于黑猫同志的怀疑,我找了一个修改版的,原作者说,这个修改版修正了一个冲突,但忘了具体是什么……(佩服这位仁兄的记性)
可是那个在电子书文件里,无法复制,所以,没办法……
作者: BlackFeather    时间: 2010-7-16 19:08
我是说一个很NC的错误




欢迎光临 仙剑之十里坡 (http://palslp.com/BBS/) Powered by Discuz! X2.5