最爱南宫煌 发表于 2010-7-6 22:40:04

[6r教程整理]对话框加强脚本

#\a : n帧之后自动关闭对话框
#\b: Banner mode. 文字将显示在对话框的正中间(横竖都是中间)。不能与其他类似功能同用(柳柳按:没什么用处的功能,中文不需要这么排版)
#\c 改变为第n种颜色. 使用\d或者\c回复正常颜色。
#\d: 回复默认字体、大小、颜色、高度。
#\f : 改变为第n种字体,使用\d回复默认字体。
#\g : 显示金钱窗口
#\h : 改变文字的字沉高度,使用\d或\h回复默认状态(柳柳按:这个功能没什么用处)
#\j : 显示n象素的空白(柳柳按:对于中文而言无用的功能)
#\i : 显示第n号物品的图标和名称
#\k : 显示第n号特技的图标和名称.
#\m : 显示第n号防具的图标和名称.
#\w : 显示第n号武器的图标和名称.
#\n : 显示第n号英雄名称(柳柳按:就是默认功能).
#\o : 更改文字的透明度为n.
#\r: 右对齐(柳柳按:比较不实用).  
#\s : 更改字体大小(柳柳按:不要改得太大,否则会出格,会变丑的^__^).
#\v : 显示第n号变量的数值.
#\x: 居中对齐,必须在一行的开头用(柳柳按:比较不实用。其实这些排版功能不如打几个空格).
#\\ : 显示"\"这个符号.
class Window_Message < Window_Selectable
  attr_accessor :autoclosetime
  attr_accessor :op
# ----------------------------
  def initialize
    super(80, 304, 480, 160)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.visible = false
    self.z = 9998
    @fade_in = false
    @fade_out = false
    @contents_showing = false
    @cursor_width = 0
    @autoclosetime = -1
    @op = 255
    @refreshflag = false
    self.active = false
    self.index = -1
  end
# ----------------------------
  def dispose
    terminate_message
    $game_temp.message_window_showing = false
    if @input_number_window != nil
      @input_number_window.dispose
    end
    super
  end
# ----------------------------
  def terminate_message
    self.active = false
    self.pause = false
    self.index = -1
    self.contents.clear
    @contents_showing = false
    if $game_temp.message_proc != nil
      $game_temp.message_proc.call
    end
    $game_temp.message_text = nil
    $game_temp.message_proc = nil
    $game_temp.choice_start = 99
    $game_temp.choice_max = 0
    $game_temp.choice_cancel_type = 0
    $game_temp.choice_proc = nil
    $game_temp.num_input_start = 99
    $game_temp.num_input_variable_id = 0
    $game_temp.num_input_digits_max = 0
    if @gold_window != nil
      @gold_window.dispose
      @gold_window = nil
    end
  end
# ----------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.font.name = "宋体"
    self.contents.font.size = 18
    x = y = 0
    @cursor_width = 0
    @autoclosetime = -1
    @refreshflag = true
    lineheight = 32
    active = ""
    a = ""
    centerflag = false
    rightflag = false
    bannerflag = false
    if $game_temp.choice_start == 0
      x = 8
    end
    if $game_temp.message_text != nil
      text = $game_temp.message_text
      begin
      last_text = text.clone
      text.gsub!(/\\\[(+)\]/) { $game_variables[$1.to_i] }
      end until text == last_text
      text.gsub!(/\\\[(+)\]/) do
   $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      text.gsub!(/\\\\/) { "\000" }
      text.gsub!(/\\\[(+)\]/) { "\001[#{$1}]" }
      text.gsub!(/\\/) { "\002" }
      text.gsub!(/\\\[(+)\]/) { "\003[#{$1}]" }
      text.gsub!(/\\\[(+)\]/) { "\004[#{$1}]" }
      text.gsub!(/\\\[(+)\]/) { "\005[#{$1}]" }
      text.gsub!(/\\/) { "\006" }
      text.gsub!(/\\/) { "\007" }
      text.gsub!(/\\/) { "\011" }
      text.gsub!(/\\\[(+)\]/) { "\023[#{$1}]" }
      text.gsub!(/\\/) { "\017" }
      text.gsub!(/\\\[(+)\]/) { "\014[#{$1}]" }
      text.gsub!(/\\\[(+)\]/) { "\015[#{$1}]" }
      text.gsub!(/\\\[(+)\]/) { "\016[#{$1}]" }
      text.gsub!(/\\\[(+)\]/) { "\013[#{$1}]" }
      text.gsub!(/\\\[(+)\]/) { "\021[#{$1}]" }
      text.gsub!(/\\\[(+)\]/) { "\022[#{$1}]" }
      while ((c = text.slice!(/./m)) != nil)
        if c == "\000"
          c = "\\"
        end
        if c == "\001"
          text.sub!(/\[(+)\]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            self.contents.font.color = text_color(color)
          end
          next
        end
        if c == "\002"
          if @gold_window == nil
            @gold_window = Window_Gold.new
            @gold_window.x = 560 - @gold_window.width
            if $game_temp.in_battle
              @gold_window.y = 192
            else
              @gold_window.y = self.y >= 128 ? 32 : 384
            end
            @gold_window.opacity = self.opacity
            @gold_window.back_opacity = self.back_opacity
          end
          next
        end
          if c == "\003"
          text.sub!(/\[(+)\]/, "")
          item_sub = $1.to_i
          c = $data_items.name
          l = self.contents.text_size&copy;.width
          draw_item_name($data_items, x, y * 32 + 1)
          x = x + l + 24
          next
        end
         if c == "\004"
          text.sub!(/\[(+)\]/, "")
          fontize = $1.to_i
          case fontize
            when 1  
              self.contents.font.name = "黑体"
            when 2  
              self.contents.font.name = "宋体"
            when 3  
              self.contents.font.name = "隶书"
            when 4  
              self.contents.font.name = "幼圆"
          end
          next
        end
         if c == "\005"
          text.sub!(/\[(+)\]/, "")
          @autoclosetime = $1.to_i
          next
        end
        if c == "\006"
          centerflag = true
          next
        end
        if c == "\007"
          rightflag = true
          next
        end
        if c == "\011"
          self.contents.font.name = "Arial"
          self.contents.font.size = 18
          self.contents.font.color = normal_color
          lineheight = 32
          next
        end
        if c == "\014"
          text.sub!(/\[(+)\]/, "")
w_sub = $1.to_i
          c = $data_weapons.name
          l = self.contents.text_size&copy;.width
          bitmap = RPG::Cache.icon($data_weapons.icon_name)
          self.contents.blt(x+4, y * 32+ 4, bitmap, Rect.new(0, 0, 24, 24))
          x += 28
          self.contents.draw_text(x+4, 32 * y, l+32, lineheight, c)
          x = x + l
          next
        end

最爱南宫煌 发表于 2010-7-6 22:40:24

          if c == "\015"
          text.sub!(/\[(+)\]/, "")
          a_sub = $1.to_i
          c = $data_armors.name
          l = self.contents.text_size&copy;.width
          bitmap = RPG::Cache.icon($data_armors.icon_name)
          self.contents.blt(x+4, y * 32+ 4, bitmap, Rect.new(0, 0, 24, 24))
          x += 28
          self.contents.draw_text(x+4, 32 * y, l+32, lineheight, c)
          x = x + l
          next
        end
          if c == "\016"
          text.sub!(/\[(+)\]/, "")
          @op = $1.to_i
          next
        end
         if c == "\017"
          bannerflag = true
          next
        end
        if c == "\018"
          text.sub!(/\[(+)\]/, "")
          jump = $1.to_i        
          x += jump
          next
        end
          if c == "\021"
          text.sub!(/\[(+)\]/, "")
          lineheight = $1.to_i
          next
        end
        if c == "\022"
          text.sub!(/\[(+)\]/, "")
          skill_sub = $1.to_i
          c = $data_skills.name
          l = self.contents.text_size&copy;.width
          bitmap = RPG::Cache.icon($data_skills.icon_name)
          self.contents.blt(x+4, y * 32+ 4, bitmap, Rect.new(0, 0, 24, 24))
          x += 28
          self.contents.draw_text(x+4, 32 * y, l+32, lineheight, c)
          x = x + l
          next
        end
         if c == "\023"
          text.sub!(/\[(+)\]/, "")
          bigness = $1.to_i
          self.contents.font.size = bigness
          next
        end
        if c == "\n"
          if centerflag == true
            x = 448 - x
            x = x / 2
            self.contents.draw_text(x, 32 * y, 448-x, lineheight, a)
          end
          if rightflag == true
            x = 448 - x
            self.contents.draw_text(x, 32 * y, 448-x, lineheight, a)
          end
          if bannerflag == true
            x = 448 - x
            x = x / 2
            self.contents.draw_text(x, 44, 448-x, lineheight, a)
          end
          a = ""
          centerflag = false
          rightflag = false
          bannerflag = false
          if y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, x].max
          end
          y += 1
          x = 0
          if y >= $game_temp.choice_start
            x = 8
          end
          next
        end
        if centerflag == false && rightflag == false && bannerflag == false
        self.contents.draw_text(4 + x, 32 * y, 40, lineheight, c)
        x += self.contents.text_size&copy;.width
      else
        a += c
        x += self.contents.text_size&copy;.width
4楼

        end
      end
    end
    if $game_temp.choice_max > 0
      @item_max = $game_temp.choice_max
      self.active = true
      self.index = 0
    end
    if $game_temp.num_input_variable_id > 0
      digits_max = $game_temp.num_input_digits_max
      number = $game_variables[$game_temp.num_input_variable_id]
      @input_number_window = Window_InputNumber.new(digits_max)
      @input_number_window.number = number
      @input_number_window.x = self.x + 8
      @input_number_window.y = self.y + $game_temp.num_input_start * 32
    end
  end
  #--------------------------------------------------------------------------
  # ● 设置窗口位置与不透明度
  #--------------------------------------------------------------------------
  def reset_window
    if $game_temp.in_battle
      self.y = 16
    else
      case $game_system.message_position
      when 0  # 上
        self.y = 16
      when 1  # 中
        self.y = 160
      when 2  # 下
        case $msr
        when 0
          self.y = 304
        when 1
          self.y =  
      when 999  #自制对话框
        self.x=180
        self.y=306
        self.width = 440
        self.height = 160
        self.opacity=0
        self.back_opacity=0
        self.contents = Bitmap.new(width - 32, height - 32)
      end
    end
    if $game_system.message_frame == 0
      self.opacity = 255
    else
      self.opacity = 0
    end
    self.back_opacity = 160
  end
# ----------------------------   
  def update
    super
    if @refreshflag && @fade_in == false
      self.contents_opacity = @op
     end
    if @autoclosetime == 0
    @autoclosetime = -1
     terminate_message
   end
    if @autoclosetime >= 1
    @autoclosetime -= 1
    end
    if @fade_in
      self.contents_opacity += 24
      if @input_number_window != nil
        @input_number_window.contents_opacity += 24
      end
      if self.contents_opacity >= @op
        @fade_in = false
      end
      return
    end
    if @input_number_window != nil
      @input_number_window.update
      if Input.trigger?(Input::C)
        $game_system.se_play($data_system.decision_se)
        $game_variables[$game_temp.num_input_variable_id] =
          @input_number_window.number
        $game_map.need_refresh = true
        @input_number_window.dispose
        @input_number_window = nil
        terminate_message
      end
      return
    end
    if @contents_showing
      if $game_temp.choice_max == 0
        self.pause = true
      end
      if Input.trigger?(Input::B)
        if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
          $game_system.se_play($data_system.cancel_se)
          $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
          terminate_message
        end
      end
      if Input.trigger?(Input::C)
        if $game_temp.choice_max > 0
          $game_system.se_play($data_system.decision_se)
          $game_temp.choice_proc.call(self.index)
        end
        @op = 255
        terminate_message
      end
      return
    end
    if @fade_out == false and $game_temp.message_text != nil
      @contents_showing = true
      $game_temp.message_window_showing = true
      reset_window
      refresh
      Graphics.frame_reset
      self.visible = true
      self.contents_opacity = 0
      if @input_number_window != nil
        @input_number_window.contents_opacity = 0
      end
      @fade_in = true
      return
    end
    if self.visible
      @fade_out = true
      self.opacity -= 48
      if self.opacity == 0
        self.visible = false
        @fade_out = false
        $game_temp.message_window_showing = false
      end
      return
    end
  end
# ----------------------------
  def update_cursor_rect
    if @index >= 0
      n = $game_temp.choice_start + @index
      self.cursor_rect.set(8, n * 32, @cursor_width, 32)
    else
      self.cursor_rect.empty
    end
  end
end

BlackFeather 发表于 2010-7-9 16:35:34

恭喜,我找到这个脚本会出错的地方了!

最爱南宫煌 发表于 2010-7-10 14:27:31

说说啊。

BlackFeather 发表于 2010-7-10 14:29:11

让要用的人自己找吧……

最爱南宫煌 发表于 2010-7-10 14:39:43

反正我不用,我只是发脚本的。

BlackFeather 发表于 2010-7-10 14:41:58

其实拿到脚本后看一遍,基本上都能找出

最爱南宫煌 发表于 2010-7-16 18:56:18

本帖最后由 最爱南宫煌 于 2010-7-16 18:59 编辑

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

BlackFeather 发表于 2010-7-16 19:08:41

我是说一个很NC的错误
页: [1]
查看完整版本: [6r教程整理]对话框加强脚本