| 
 
| 赞 | 22 |  
| VIP | 917 |  
| 好人卡 | 110 |  
| 积分 | 218 |  
| 经验 | 288474 |  
| 最后登录 | 2022-10-15 |  
| 在线时间 | 6925 小时 |  
 Lv5.捕梦者 (版主) 
	梦石20 星屑1840 在线时间6925 小时注册时间2012-12-14帖子11485    
 | 
| 气泡型对话框,不过还是建议用FUKI对话框。复制代码#===============================================================
module FUKI
  # 头像图片保存目录的设定
  HEAD_PIC_DIR = "Graphics/Pictures/"
  # 是否显示尾部图标  772  y 调整与角色的距离
  TAIL_SHOW = true
  # Skin的设定
  # 使用数据库默认窗口Skin情况下这里使用[""]
  SAY_SKIN_NAME = "say"   # 呼出对话框用Skin
  THINK_SKIN_NAME = "think"
  VOICE_SKIN_NAME = "voiceover"
  # 字体大小
  MES_FONT_SIZE = 20    # 呼出对话框
  # 字体颜色
  #(设定为 Color.new(0, 0, 0, 0) 表示使用普通文字色)
  FUKI_COLOR = Color.new(155, 98, 38, 255) # 呼出对话框
  # 窗口透明度
  # 如修改窗口透明度请同时修改尾部箭头图形内部的透明度
  FUKI_OPACITY = 255    # 呼出对话框
  MES_OPACITY = 255     # 默认信息窗口
  # 窗口表示时是否根据画面大小自动检查窗口出现的位置,
  # 自动改变位置( true / false )
  # 设置成 true 在某些变态情况下可能出现箭头图标颠倒的问题 <- bbschat <= KKME
  POS_FIX = true
  # 在画面最边缘表示时的稍微挪动
  # 使用圆形Skin的角和方框的角重合的情况下为 true
  CORNER_SHIFT = false
  SHIFT_PIXEL = 4   # true 时挪动的象素
  # 呼出对话框的相对位置(纵坐标)
  POP_SHIFT_TOP = 0         # 表示位置为上的时候
  POP_SHIFT_UNDER = 0       # 表示位置为下的时候
  # 信息的表示速度(数字越小速度越快,0为瞬间表示)
  # 游戏中 可随时用数字代入 $mes_speed 来改变消息表示速度。
  MES_SPEED = 2
  # 默认的文字自动消失时间为45帧
  DEFAULT_AUTO_CLOSE_TIME = 45
  FRAME_WIDTH = 5#
  HEAD_WIDTH = 100
  FADE_IN_STEP = 48#48
  FADE_OUT_STEP = 48#
end
#===============================================================
# 初始化两个变量,不要动(by KKME◎66RPG.com)
#===============================================================
$mes_center = -1
#===============================================================
# □ Game_Temp
#===============================================================
class Game_Temp
  attr_accessor  :namebmp              #保存头像图片的Hash表
  alias initialize_fuki initialize
  def initialize
    initialize_fuki
    # 如果不想使用角色名字直接作为头像文件名
    # 可在这里重新设定角色名字与文件名的对应关系
    @namebmp = {}
  end
end
#===============================================================
# □ Window_Message
#===============================================================
class Window_Message < Window_Selectable
  MARGIN_WIDTH = 0
  #-----------------------------------------------------------
  # ● 初始化状态
  #-----------------------------------------------------------
  def initialize
    super(MARGIN_WIDTH, 304, 640 - MARGIN_WIDTH * 2, 160)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.visible = false
    self.z = 9998
    self.y=+32
    @fade_in = false
    @fade_out = false
    @contents_showing = false
    @cursor_width = 0
    @kkme_name = ""
    @head_name = nil
    self.active = false
    self.index = -1
    [url=home.php?mod=space&uid=36110]@Wait[/url] = 0
    @dx = 0
    @dy = 0#0
    @auto_close=-1
    $mes_speed = FUKI::MES_SPEED
    [url=home.php?mod=space&uid=385195]@THINK[/url] = false
    skin = FUKI::SAY_SKIN_NAME != "" ? FUKI::SAY_SKIN_NAME : FUKI::VOICE_SKIN_NAME
    self.windowskin = RPG::Cache.windowskin(skin)
  end
  #-----------------------------------------------------------
  # ○ 决定窗口尺寸并生成窗口
  #-----------------------------------------------------------
  def refresh_create
    @kkme_name = nil
    @head_name = nil
    @think = true
    begin
      temp = $game_temp.message_text.split("*")
      if temp[1] != nil
        @kkme_name = temp[0]
        
        @kkme_name.gsub!(/\\[Nn]\[([0-9]+)\]/) do
          $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
        end
        
        @head_name = @kkme_name.clone
        @head_name.sub!(/([0-9])/,"")
  
        @kkme_name = @kkme_name.split("-")[0] if @kkme_name.size > 0
        
        if @kkme_name == ""
          @head_name = $game_party.actors[0].name + @head_name
        elsif @kkme_name.to_i != 0
          @head_name = $game_party.actors[@kkme_name.to_i].name + @head_name
        end
        
        if @head_name == "无"
          @head_name = nil
        end
        
        if temp[2] != nil
          $game_temp.message_text = temp[2][1, temp[2].size]
        else
          @think = false
          $game_temp.message_text = temp[1][1, temp[1].size]
        end          
        #$game_temp.message_text = $game_temp.message_text[@kkme_name.size + 2, $game_temp.message_text.size]
      end
    rescue
    end
       
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.font.size = FUKI::MES_FONT_SIZE
      
    update_character
    
    #cob
    if @character == nil       
      skin = FUKI::VOICE_SKIN_NAME
      #self.back_opacity = 180
    elsif @think
      skin = FUKI::THINK_SKIN_NAME != "" ? FUKI::THINK_SKIN_NAME : FUKI::VOICE_SKIN_NAME
      #$game_temp.message_text = "(" + $game_temp.message_text + ")" unless $game_system.message_position == 1
    else
      skin = FUKI::SAY_SKIN_NAME != "" ? FUKI::SAY_SKIN_NAME : FUKI::VOICE_SKIN_NAME
    end
    
    self.windowskin = RPG::Cache.windowskin(skin)
    
    
    if @character != nil        
      # 生成呼出窗口
      set_fukidasi
      # 生成角色名字窗口
      set_namewindow if @head_name != nil
    else
      reset_window
    end
    # 初始化信息表示使用的变量
    @dx = @dy = 0
    @cursor_width = 0
    @contents_drawing = true
    # 瞬间表示的情况下
    if $mes_speed == 0
      # 循环信息描绘处理
      while $game_temp.message_text != ""
        draw_massage
      end
      draw_opt_text
      @contents_showing_end = true
      @contents_drawing = false
    else
      # 一个一个描绘文字
      refresh_drawtext
    end
  end
  #-----------------------------------------------------------
  # ○ 一个一个描绘文字
  #-----------------------------------------------------------
  def refresh_drawtext
    if $game_temp.message_text != nil
      if @wait > 0
        @wait -= 1
      elsif @wait == 0
        # 描绘处理
        draw_massage
        @wait = $mes_speed
      end
    end
    # 描绘结束
    if $game_temp.message_text == ""
      draw_opt_text
      @contents_showing_end = true
      @contents_drawing = false
    end
  end
  #-----------------------------------------------------------
  # ○ 取得窗口尺寸
  #-----------------------------------------------------------
  def update_window_size
    x = y = 0
    h = w = 0
    @cursor_width = 0
    # 有选择项的话,处理字的缩进
    if $game_temp.choice_start == 0
      x = 16
    end
    # 有等待显示的文字的情况下
    if $game_temp.message_text != nil
      text = $game_temp.message_text.clone
      # 限制文字处理
      begin
        last_text = text.clone
        text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
      end until text == last_text
      text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      # 为了方便、将 "\\\\" 变换为 "\000"
      text.gsub!(/\\\\/) { "\000" }
      # "\\C" 变为 "\001" 、"\\G" 变为 "\002"
      text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001" }
      text.gsub!(/\\[Gg]/) { "\002" }
      text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "\003[#{$1}]" }
      text.slice!(/\\[Aa]\[(\w+)\]/) { "" }
      # c 获取 1 个字 (如果不能取得文字就循环)
      while ((c = text.slice!(/./m)) != nil)
        # \\ 的情况下
        if c == "\000"
          # 还原为本来的文字
          c = "\\"
        end
        # \C[n] 或者 \G 的情况下
        if c == "\001" or c == "\002"
          # 下面的文字
          next
        end
        # 另起一行文字的情况下
        if c == "\n"
          # y 累加 1
          y += 1
          # 取得纵横尺寸
          h = y
          w = x > w ? x : w
          if y >= $game_temp.choice_start
            w = x + 8 > w ? x + 8 : w
          end
          x = 0
          # 移动到选择项的下一行
          if y >= $game_temp.choice_start
            x = 8
          end
          # 下面的文字
          next
        end
        # x 为要描绘文字的宽度加法运算
        x += self.contents.text_size(c).width
      end
    end
    # 输入数值的情况
    if $game_temp.num_input_variable_id > 0
      digits_max = $game_temp.num_input_digits_max
      h += 1
      x = digits_max * self.contents.font.size + 16
      w = x > w ? x : w
    end
    w += 40
    h = h * (self.contents.font.size + 10) + 26
    #cob
    if @head_name != nil
      w += FUKI::HEAD_WIDTH + 8
      min_h = FUKI::HEAD_WIDTH + 8 + FUKI::FRAME_WIDTH * 2
      h = min_h if h < min_h
    end
    
    #cob
    if $game_system.message_frame == 1
      h += 16
    end
    self.width = w
    self.height = h
    #self.y=+32
  end
  #-----------------------------------------------------------
  # ○ 描绘信息处理
  #-----------------------------------------------------------
  def draw_massage
    # 有等待显示的文字的情况下
    if $game_temp.message_text != nil
      text = $game_temp.message_text
      #cob
      if @head_name != nil
        start_x = FUKI::HEAD_WIDTH + 8
      elsif @tail != nil
        start_x = 4
      else
        #start_x = 4
        start_x = @text_x + 4 - MARGIN_WIDTH
      end
      # 限制文字处理
      begin
        last_text = text.clone
        text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
      end until text == last_text
      text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      # 为了方便、将 "\\\\" 变换为 "\000"
      text.gsub!(/\\\\/) { "\000" }
      # "\\C" 变为 "\001"、"\\G" 变为 "\002"
      text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
      text.gsub!(/\\[Gg]/) { "\002" }
      text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "\003[#{$1}]" }
      if text.slice!(/\\[Aa]\[(\w+)\]/)!=nil
        @auto_close=$1.to_i
      else
        if text.slice!(/\\[Aa]/)!=nil
          @auto_close = FUKI::DEFAULT_AUTO_CLOSE_TIME
        end
      end
      # c 获取 1 个字
      if ((c = text.slice!(/./m)) != nil)
        # 选择项的情况
        if @dy >= $game_temp.choice_start
          # 处理字的缩进
          @dx = 8
          # 描绘文字
          self.contents.draw_text(start_x + @dx, 32 * @dy, 40, 32, c)#32
          # x 为要描绘文字宽度的加法运算
          @dx += self.contents.text_size(c).width
          # 循环
          while ((c = text.slice!(/./m)) != "\n")
            # 描绘文字
            self.contents.draw_text(start_x + @dx, 32 * @dy, 40, 32, c)
            # x 为要描绘文字宽度的加法运算
            @dx += self.contents.text_size(c).width
          end
          if c == "\n"
            # 更新光标宽度
            @cursor_width = [@cursor_width, @dx].max
            # dy 累加 1
            @dy += 1
            @dx = 0
          end
          return
        end
        # \\ 的情况下
        if c == "\000"
          # 还原为本来的文字
          c = "\\"
        end
        #\C[n] 的情况下
        if c == "\001"
          # 更改文字色
          text.sub!(/\[([0-9]+)\]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            self.contents.font.color = text_color(color)
          end
          return
        end
        # \G 的情况下
        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
          return
        end
        if c == "\003"
          text.sub!(/\[([0-9]+)\]/, "")
          self.contents.font.color.alpha = [[0, $1.to_i].max, 255].min
          return
        end
        # 另起一行文字的情况下
        if c == "\n"
          # dy 累加 1
          @dy += 1
          @dx = 0
          return
        end
        # 描绘文字
        self.contents.font.size = FUKI::MES_FONT_SIZE
        font_size = self.contents.font.size
        self.contents.draw_text(start_x+@dx, (font_size+10)*@dy, font_size, font_size, c)
        # dx 为要描绘文字的宽度加法运算
        @dx += self.contents.text_size(c).width
      end
    end
  end
  #-----------------------------------------------------------
  # ○ 选择项和输入数值的情况下
  #-----------------------------------------------------------
  def draw_opt_text
    # 选择项的情况下
    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 set_fukidasi
      # 不显示暂停标志
      self.pause = false
      update_window_size
      update_window_pos
      
      self.opacity = 0
      self.contents.dispose
      self.contents = Bitmap.new(width - 32, height - 32)#32
      self.back_opacity = FUKI::FUKI_OPACITY
      self.contents.clear
      self.contents.font.color = normal_color
      self.contents.font.size = FUKI::MES_FONT_SIZE
      
      # 描绘尾部图标
      if $game_system.message_frame == 0 and FUKI::TAIL_SHOW == true and
          @message_position != 1
        @tail = Sprite.new        
        @tail.z = self.z + 1
        @tail.opacity = 0
        update_tail_pos
        
    #cob
    if @think
      skin = FUKI::THINK_SKIN_NAME != "" ? FUKI::THINK_SKIN_NAME : FUKI::VOICE_SKIN_NAME
    else
      skin = FUKI::SAY_SKIN_NAME != "" ? FUKI::SAY_SKIN_NAME : FUKI::VOICE_SKIN_NAME
    end        
        
        case @message_position
        when 0  # 上
          if(@tail.x < self.x + self.width)#/ 2
            @tail.bitmap = RPG::Cache.windowskin(skin + "-upper_right")
          else
            @tail.bitmap = RPG::Cache.windowskin(skin + "-upper_left")
          end
        when 2  # 下
          if(@tail.x + 40 > self.x + self.width  )
            @tail.bitmap = RPG::Cache.windowskin(skin + "-lower_left")
          else
            @tail.bitmap = RPG::Cache.windowskin(skin + "-lower_right")
          end
        end
      end
  end
  #-----------------------------------------------------------
  # ○ 新功能:根据输入文章计算呼出对话框的位置
  #-----------------------------------------------------------
  def update_character
    @character = get_character_by_name
  end
  
  BATTLER_NAME = {    
    
  }
  def get_character_by_name
    return nil if @kkme_name == nil
    
    if $game_temp.in_battle
      return $game_party.actors[0] if @kkme_name == ""
      return $game_party.actors[@kkme_name.to_i] if @kkme_name.to_i != 0
      
      name = BATTLER_NAME[@kkme_name]
      name = @kkme_name unless name
      for enemy in $game_troop.enemies
        return enemy if enemy.name == name
      end
      
      return nil
    end
    
    return $game_player if @kkme_name == ""
    return $game_party.characters[@kkme_name.to_i - 1] if @kkme_name.to_i != 0
    for event in $game_map.events.values
      return event if event.name == @kkme_name and event.character_name != ""
    end
      
    for actor in $game_party.actors
      return $game_player if actor.name == @kkme_name
    end
      
    return nil
  end
  
  def tail_offset_x
    return 18 if @think
    return 16
  end
  
  def tail_offset_y
    return 18 if @think
    return 2
  end
  #-----------------------------------------------------------
  # ○ 计算呼出对话框的位置
  #-----------------------------------------------------------
  def update_window_pos
    # 记录文章显示位置
    @message_position = $game_system.message_position
    if @message_position == 1
      self.x = (640 - self.width) / 2
      self.y = (480 - self.height) / 2
      return
    end
    
    update_character
    if @character == nil
      # 角色不存在的情况下使用默认信息框
      del_fukidasi
      reset_window
      return
    end
    
    if $game_temp.in_battle
      @message_position = 0
    elsif $mes_center != nil
      center_char = get_character($mes_center)
      if center_char != nil
        if @character.real_y > center_char.real_y
          @message_position = 2
        else
          @message_position = 0
        end
      end
    end
    case @message_position
    when 0  # 上
      y = @character.screen_y - self.height - @character.sprite_height + FUKI::POP_SHIFT_TOP
      y -= tail_offset_y
      if FUKI::POS_FIX and y < 4
        if $game_temp.in_battle
          y = 4    #4      
        else          
          @message_position = 2
          y = @character.screen_y + FUKI::POP_SHIFT_UNDER
          y += tail_offset_y
        end
      end
    when 2  # 下
      y = @character.screen_y + FUKI::POP_SHIFT_UNDER
      y += tail_offset_y
      if FUKI::POS_FIX and y + self.height > 480 - 4
        @message_position = 0
        y = @character.screen_y - self.height - @character.sprite_height + FUKI::POP_SHIFT_TOP
        y -= tail_offset_y
      end
    end
    x = @character.screen_x - self.width / 2
    case @message_position
    when 0  # 上
      x += tail_offset_x
    when 2  # 下
      x -= tail_offset_x
    end
    if x + self.width > 640 - 4
      x = 640 - 4 - self.width
    elsif x < 4
      x = 4
    end
    
    if y + self.height > 480 - 4
      y = 480 - 4 - self.height
    elsif y < 4
      y = 4
    end
    self.x = x
    self.y = y
  end
  #-----------------------------------------------------------
  # ○ 计算尾部图标的位置
  #-----------------------------------------------------------
  def update_tail_pos
    x = @character.screen_x - tail_offset_x
    
    case @message_position
    when 0  # 上
      # 画面边缘的话则移动位置
      if FUKI::CORNER_SHIFT
        if x == 0
          x = FUKI::SHIFT_PIXEL
        elsif x == 640 - 32
          x = 640 - 32 - FUKI::SHIFT_PIXEL
        end
      end
      y = self.y + self.height - 16
      y += 16 if @think#16
    when 2  # 下
      # 画面边缘的话则移动位置
      if FUKI::CORNER_SHIFT
        if x == 0
          x = FUKI::SHIFT_PIXEL
        elsif @tail.x == 640 - 32
          x = 640 - 32 - FUKI::SHIFT_PIXEL
        end
      end
      y = self.y - 16
      y -= 16 if @think
    end    
    
    @tail.x = x
    @tail.y = y
  end
  #-----------------------------------------------------------
  # ○ 计算名字窗口的位置
  #-----------------------------------------------------------
  def update_name_pos
    @head.x = self.x + FUKI::FRAME_WIDTH + 4
    @head.y = self.y + (self.height - FUKI::HEAD_WIDTH)/2
  end
  #-----------------------------------------------------------
  # ○ 设置角色名字窗口
  #-----------------------------------------------------------
  def set_namewindow      
    #判断名称是否有对应的图片"Graphics/heads/" +
    if $game_temp.namebmp[@head_name] == nil then
      sFile = FUKI::HEAD_PIC_DIR + @head_name + ".png"
    else
      sFile = FUKI::HEAD_PIC_DIR + $game_temp.namebmp[@head_name] + ".png"
    end
    # 生成头像
    [url=home.php?mod=space&uid=346374]@head[/url] = Sprite.new
    @head.bitmap = Bitmap.new(sFile)
    @head.z = self.z + 1
    @head.opacity = 0
    update_name_pos
  end
  #-----------------------------------------------------------
  # ○ 释放呼出对话框和角色名字窗口
  #-----------------------------------------------------------
  def del_fukidasi
    if @tail != nil
      @tail.dispose
      @tail = nil
    end
    if @head != nil
      @head.dispose
      @head = nil
    end
    self.opacity = 0
    self.x = MARGIN_WIDTH
    self.width = 640 - MARGIN_WIDTH * 2
    self.height = 160
    self.contents.dispose
    self.contents = Bitmap.new(width - 32, height - 32)
    self.pause = true
  end
  #-----------------------------------------------------------
  # ○ 取得角色
  #     parameter : 参数
  #-----------------------------------------------------------
  def get_character(parameter)
    # 参数分歧
    case parameter
    when -1  # 玩家
      return $game_player
    when 0   # 该事件
      events = $game_map.events
      return events == nil ? nil : events[$active_event_id]
    else     # 特定事件
      if parameter > 0
        events = $game_map.events
        return events == nil ? nil : events[parameter]
      end
      events = $game_party.characters
      return events == nil ? nil : events[-parameter - 2]
    end
  end
  #-----------------------------------------------------------
  # ● 设定窗口位置和不透明度
  #-----------------------------------------------------------
  def reset_window
    update_window_size
    @text_x = 320 - width / 2
    self.width = 640 - MARGIN_WIDTH * 2
    self.contents.dispose    
    self.contents = Bitmap.new(width - 32, height - 32)
    self.x = 320 - width / 2
    
    if $game_temp.in_battle
      self.y = 32#16
    else
      case $game_system.message_position
      when 0  # 上
        self.y = 16
      when 1  # 中
        self.y = 240 - self.height / 2 #160
      when 2  # 下
        #self.y = 304
        self.y = 480 - 16 - height
      end
    end
    if $game_system.message_frame == 0
      self.opacity = 255
    else
      self.opacity = 0
    end
    self.back_opacity = FUKI::MES_OPACITY
    @think = false
    
  end
  #-----------------------------------------------------------
  # ● 刷新画面
  #-----------------------------------------------------------
  def update
    super
    
    # 呼出模式下跟随事件移动
    if @tail != nil
      update_window_pos
      update_name_pos if @head != nil
      update_tail_pos
    end
    # 渐变的情况下
    if @fade_in    
      self.opacity += FUKI::FADE_IN_STEP if $game_system.message_frame == 0
      self.contents_opacity += FUKI::FADE_IN_STEP
      @head.opacity += FUKI::FADE_IN_STEP if @head != nil
      @tail.opacity += FUKI::FADE_IN_STEP if @tail != nil
      @input_number_window.contents_opacity += FUKI::FADE_IN_STEP if @input_number_window != nil
      @fade_in = false if self.contents_opacity == 255
      return
    end
    # 显示信息中的情况下
    if @contents_drawing
      refresh_drawtext
      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_end
      # 不是显示选择项且不是呼出对话模式则显示暂停标志
      if $game_temp.choice_max == 0 and @tail == nil
        self.pause = true
      else
        self.pause = false
      end
      
      #cob
      if false and $game_temp.choice_max == 0 and @auto_close == -1
        if Input.press?(Input::B) or
            Input.press?(Input::UP) or
            Input.press?(Input::DOWN) or
            Input.press?(Input::LEFT) or
            Input.press?(Input::RIGHT) 
          terminate_message
          del_fukidasi
          $game_temp.terminate_message = true
        end
      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
      # 自动关闭
      #@auto_close > 0 ? @auto_close-=1 : @auto_close=-1
      #if @auto_close==0
        # 文字还没有处理完的时候
        # 选择项
        #if $game_temp.choice_max > 0
          #$game_system.se_play($data_system.decision_se)
          #$game_temp.choice_proc.call(self.index)
        #end
        #terminate_message
        #del_fukidasi
      #end
      # 确定
      if Input.trigger?(Input::C) and @auto_close == -1
        if $game_temp.choice_max > 0
          $game_system.se_play($data_system.decision_se)
          $game_temp.choice_proc.call(self.index)
        end
        terminate_message
        # 释放呼出窗口
        del_fukidasi
      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_create
      if @head != nil
        @head.opacity = 0
      end
      if @tail != nil
        @tail.opacity = 0
      end
      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.contents_opacity -= FUKI::FADE_OUT_STEP
      @head.opacity -= FUKI::FADE_OUT_STEP if @head != nil
      @tail.opacity -= FUKI::FADE_OUT_STEP if @tail != nil
      @input_number_window.contents_opacity -= FUKI::FADE_OUT_STEP if @input_number_window != nil
      if self.opacity == 0
        self.visible = false
        @fade_out = false
        $game_temp.message_window_showing = false
        del_fukidasi
      end
      return
    end
  end
  #-----------------------------------------------------------
  # ● 释放
  #-----------------------------------------------------------
  def dispose
    terminate_message
    $game_temp.message_window_showing = false
    if @input_number_window != nil
      @input_number_window.dispose
    end
    del_fukidasi    
    super
  end
  #-----------------------------------------------------------
  # ● 信息结束处理
  #-----------------------------------------------------------
  def terminate_message
    @auto_close = -1
    self.active = false
    self.pause = false
    self.index = -1
    self.contents.clear
    # 清除显示中标志
    @contents_showing = false
    @contents_showing_end = false
    unless @kkme_name == "" or @kkme_name == nil
      @kkme_name = ""
    end
    # 呼叫信息调用
    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 update_cursor_rect
    if [url=home.php?mod=space&uid=370741]@Index[/url] >= 0
      n = $game_temp.choice_start + @index
      self.cursor_rect.set(8, n * 32, @cursor_width, 32)
    else
      self.cursor_rect.empty
    end
  end
  #-----------------------------------------------------------
  # ● 取得普通文字色
  #-----------------------------------------------------------
  def normal_color
    return FUKI::FUKI_COLOR #if FUKI::FUKI_COLOR != nil
  end
end
#===============================================================
# ■ Window_InputNumber
#===============================================================
class Window_InputNumber < Window_Base
  #-----------------------------------------------------------
  # ● 初始化对像
  #     digits_max : 位数
  #-----------------------------------------------------------
  def initialize(digits_max)
    @digits_max = digits_max
    [url=home.php?mod=space&uid=27178]@Number[/url] = 0
    # 从数字的幅度计算(假定与 0~9 等幅)光标的幅度
    dummy_bitmap = Bitmap.new(32, 32)
    dummy_bitmap.font.size = FUKI::MES_FONT_SIZE
    @cursor_width = dummy_bitmap.text_size("0").width + 8
    dummy_bitmap.dispose
    super(0, 0, @cursor_width * @digits_max + 32, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.size = FUKI::MES_FONT_SIZE
    self.z += 9999
    self.opacity = 0
    @index = 0
    refresh
    update_cursor_rect
  end
end
#============================================================
# Game_Map,把events变量公开
#============================================================
class Game_Map
  attr_reader   :events
end
#============================================================
# 便于返回姓名
#============================================================
class Game_Event < Game_Character
  def name
    return @event.name
  end
  def name=(na)
    @event.name = na
  end
end
#============================================================
# 增加变量$active_event_id,用于在“本事件”显示对话
#============================================================
class Interpreter
  #-----------------------------------------------------------
  # ● 设置事件
  #     event_id : 事件 ID
  #-----------------------------------------------------------
  alias setup_fuki setup
  def setup(list, event_id)
    setup_fuki(list, event_id)
    # 如果不是战斗中
    if !($game_temp.in_battle)
      # 记录事件 ID
      $active_event_id = event_id
    end
  end
end
#cob
class Game_Character
  SPRITE_HEIGHTS = {
    #"097-Monster11"=>300,
  }
  def sprite_height
    height = SPRITE_HEIGHTS[@character_name]
    return height / 4 if height
    bitmap = RPG::Cache.character(@character_name, @character_hue)
    return bitmap.height / 4
  end
end
class Game_Battler
  def sprite_height
    bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
    return bitmap.height
  end
end
这个脚本设置对话方面很困难的。
 | 
 |