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

Project1

 找回密码
 注册会员
搜索
楼主: idd009
打印 上一主题 下一主题

[已经解决] 如何在人物對話上加上角色图片?

 关闭 [复制链接]

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1535
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

11
发表于 2009-10-4 21:06:40 | 只看该作者
放在文章里的是: \L[001]

放在文件夹里的:"Graphics/battlers/66rpg_001_h.png”

[]里面的001是对应的。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2009-9-14
帖子
14
12
 楼主| 发表于 2009-10-5 15:52:01 | 只看该作者
我已照你們說的去做,怎麼還是不行
是不是下面做錯了



回复 支持 反对

使用道具 举报

Lv1.梦旅人


梦石
0
星屑
89
在线时间
24 小时
注册时间
2006-5-27
帖子
11425

贵宾

13
发表于 2009-10-5 15:58:10 | 只看该作者
我已照你們說的去做,怎麼還是不行
是不是下面做錯了


8502
8503
idd009 发表于 2009-10-5 15:52

错了错了。
在左边边栏里右键单击添加,会出现一个新的栏目,把脚本粘贴进新的空栏里。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

伸手爱好者

梦石
0
星屑
50
在线时间
8 小时
注册时间
2009-3-28
帖子
527
14
发表于 2009-10-5 16:03:35 | 只看该作者
LZ太强大了 …… ……
强大得我语无伦次…… ……


是这样的吧……
咱在咱的设计素描书上看到有“柳笛”这个名字,恩~到底有怎样的关系呢?
[img]http://rpg.blue/data/attachment/forum/month_0910/09102318341719b34b80b536d4.gif[/img]
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2009-9-14
帖子
14
15
 楼主| 发表于 2009-10-5 16:29:04 | 只看该作者
謝謝大家,我改好了...

然後..又出錯了...

是腳本的問題嗎=____=

回复 支持 反对

使用道具 举报

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1535
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

16
发表于 2009-10-5 16:38:31 | 只看该作者
  1. class Game_System
  2. attr_accessor :soundname_on_speak
  3. end
复制代码
插入这个试试~~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2009-9-14
帖子
14
17
 楼主| 发表于 2009-10-5 16:59:43 | 只看该作者
本帖最后由 凌辰 于 2009-10-5 17:06 编辑

還是不行=.=

要不我把腳本給你看

=begin

============================================================================
66加强对话框--66rpg
============================================================================

默认为一个字一个字的方式,如果需要一次全部显示,
请在游戏中使用脚本:$game_system.typing = true
  
默认对话字没有声音,如果需要声音,请在游戏中使用脚本:$game_system.soundname_on_speak = "这里输入文件名"
我唯一一个见过“胡乱配音”的游戏是天使帝国2代,该游戏说话的时候每个字符随机发一个外星语音

其他在对话中可以使用的功能:

\n[1]:显示1号角色的姓名

\name[李逍遥]:显示一个“李逍遥”方框,表示说话人姓名

\p[1]:对话框出现在1号事件的上方
\p[0]:主人公上方出现对话框
使用\p功能后可以自动调整对话框大小

\\:显示"\"这个符号

\v[1] :显示变量1

\v[a1] :显示防具1

\v[w1] :显示武器1

# \v[i1] :显示物品1

# \v[s1] :显示特技1

# \c[1-8]:更改颜色
#1:深蓝色
#2:浅红色
#3:青色
#4:浅蓝色
5:紫色
6:黄色
7:灰色
0:白色

\g:显示金钱窗口

\a[SE文件名]:对话的时候播放SE

\s[1-19]:更改弹字的速度

\.   :停顿一刹那(1、2帧)
\|   :停顿片刻(20帧)

\>   :文字不用打字方式
\<   :文字使用打字方式

\!   :等待玩家按回车再继续
\~   :文字直接消失

\I   :下一行从这个位置开始

\o[123]:文字透明度改为123,模拟将死之人(汗)

\h[12]:改用12号字

\b[50]:空50象素

\L[001]:在左边显示图片“Graphics/battlers/66rpg_001_h.png”
\R[001]:在右边显示图片“Graphics/battlers/66rpg_001_h.png”

\Lk:清除左边的图像
\Rk:清除右边的图像

=end

#==============================================================================
# ■ Window_Message
#------------------------------------------------------------------------------
class Window_Message < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化状态
  #--------------------------------------------------------------------------
  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
    self.active = false
    self.index = -1
    if $game_system.soundname_on_speak == nil then
      $game_system.soundname_on_speak = ""
    end
    @opacity_text_buf = Bitmap.new(32, 32)
  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
    if @name_window_frame != nil
      @name_window_frame.dispose
      @name_window_frame = nil
    end
    if @name_window_text != nil
      @name_window_text.dispose
      @name_window_text = nil
    end
    if @right_picture != nil and @right_keep == true
      @right_picture.dispose
    end   
    if @left_picture != nil and @left_keep == true
      @left_picture.dispose
    end
  end
  def refresh
    # 初期化
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.font.size = Font.default_size
    @x = @y = @max_x = @max_y = @indent = @lines = 0
    @left_keep = @right_keep = false
    @face_indent = 0
    @opacity = 255
    @cursor_width = 0
    @write_speed = 0
    @write_wait = 0
    @mid_stop = false
    @face_file = nil
    @popchar = -2
    if $game_temp.choice_start == 0
      @x = 8
    end
    if $game_temp.message_text != nil
      @now_text = $game_temp.message_text
      #——頭像設置
      if (/\\[Ff]\[(.+?)\]/.match(@now_text))!=nil then
        @face_file = $1 + ".png"
        @x = @face_indent = 128
        if FileTest.exist?("Graphics/Pictures/" + $1 + ".png")
          self.contents.blt(16, 16, RPG::Cache.picture(@face_file), Rect.new(0, 0, 96, 96))
        end
        @now_text.gsub!(/\\[Ff]\[(.*?)\]/) { "" }
      end
      #——左半身像設置
      if (/\\[Ll]\[(.+?)\]/.match(@now_text))!=nil then
        @face = "66rpg_" + $1 + "_h.png"
        if $加密 == true
          if @left_picture != nil
            @left_picture.dispose
          end
          @left_picture = Sprite.new
          @left_picture.bitmap = Bitmap.new("Graphics/battlers/#{@face}")
          @left_picture.y = 480-@left_picture.bitmap.height
          @left_picture.x = 0
          @left_picture.mirror = true
          @now_text.gsub!(/\\[Ll]\[(.*?)\]/) { "" }
        else         
          if FileTest.exist?("Graphics/battlers/#{@face}")
            if @left_picture != nil
              @left_picture.dispose
            end
            @left_picture = Sprite.new
            @left_picture.bitmap = Bitmap.new("Graphics/battlers/#{@face}")
            @left_picture.y = 480-@left_picture.bitmap.height
            @left_picture.x = 0
            @left_picture.mirror = true
            @now_text.gsub!(/\\[Ll]\[(.*?)\]/) { "" }
          end
        end        
      end
      #——右半身像設置
      if (/\\[Rr]\[(.+?)\]/.match(@now_text))!=nil then
        @face = "66rpg_" + $1 + "_h.png"
        if $加密 == true
          if @right_picture != nil
            @right_picture.dispose
          end
          @right_picture = Sprite.new
          @right_picture.bitmap = Bitmap.new("Graphics/battlers/#{@face}")
          @right_picture.y = 480-@right_picture.bitmap.height
          @right_picture.x = 640-@right_picture.bitmap.width
          @now_text.gsub!(/\\[Rr]\[(.*?)\]/) { "" }
        else
          if FileTest.exist?("Graphics/battlers/#{@face}")
            if @right_picture != nil
              @right_picture.dispose
            end
            @right_picture = Sprite.new
            @right_picture.bitmap = Bitmap.new("Graphics/battlers/#{@face}")
            @right_picture.y = 480-@right_picture.bitmap.height
            @right_picture.x = 640-@right_picture.bitmap.width
            @now_text.gsub!(/\\[Rr]\[(.*?)\]/) { "" }
          end
        end
      end
      if (/\\[Rr]k/.match(@now_text)) != nil
        @right_keep = true
        @now_text.sub!(/\\[Rr]k/) { "" }
      end
      if (/\\[Ll]k/.match(@now_text)) != nil
        @left_keep = true
        @now_text.sub!(/\\[Ll]k/) { "" }
      end
      # 显示人物姓名
      name_window_set = false
      if (/\\[Nn]ame\[(.+?)\]/.match(@now_text)) != nil
        name_window_set = true
        name_text = $1
        @now_text.sub!(/\\[Nn]ame\[(.*?)\]/) { "" }
      end
      
      # 文字位置的判定
      if (/\\[Pp]\[([-1,0-9]+)\]/.match(@now_text))!=nil then
        @popchar = $1.to_i
        if @popchar == -1
          @x = @indent = 48
          @y = 4
        end
        @now_text.gsub!(/\\[Pp]\[([-1,0-9]+)\]/) { "" }
      end
      
      # 开始
      begin
        last_text = @now_text.clone
        @now_text.gsub!(/\\[Vv]\[([IiWwAaSs]?)([0-9]+)\]/) { convart_value($1, $2.to_i) }
      end until @now_text == last_text
      @now_text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
      $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
          @now_text.gsub!(/\\\\/) { "\000" }
    @now_text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
    @now_text.gsub!(/\\[Gg]/) { "\002" }
    @now_text.gsub!(/\\[Ss]\[([0-9]+)\]/) { "\003[#{$1}]" }
    @now_text.gsub!(/\\[Aa]\[(.*?)\]/) { "\004[#{$1}]" }
    @now_text.gsub!(/\\[.]/) { "\005" }
    @now_text.gsub!(/\\[|]/) { "\006" }

    @now_text.gsub!(/\\[>]/) { "\016" }
    @now_text.gsub!(/\\[<]/) { "\017" }
    @now_text.gsub!(/\\[!]/) { "\020" }
    @now_text.gsub!(/\\[~]/) { "\021" }
   
    @now_text.gsub!(/\\[Ii]/) { "\023" }
    @now_text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "\024[#{$1}]" }
    @now_text.gsub!(/\\[Hh]\[([0-9]+)\]/) { "\025[#{$1}]" }
    @now_text.gsub!(/\\[Bb]\[([0-9]+)\]/) { "\026[#{$1}]" }
    @now_text.gsub!(/\\[Kk]\[(.*?)\]/) { "\027[#{$1}]" }
    if @popchar >= 0
      @text_save = @now_text.clone
      @max_x = 0
      @max_y = 4
      for i in 0..3
        line = @now_text.split(/\n/)[3-i]
        @max_y -= 1 if line == nil and @max_y <= 4-i
        next if line == nil
        cx = contents.text_size(line).width
        @max_x = cx if cx > @max_x
      end
      self.width = @max_x + 48 + @face_indent
      self.height = (@max_y - 1) * 32 + 64
    else
      @max_x = self.width - 32 - @face_indent
    end
    reset_window
      if name_window_set
        off_x = 0
        off_y = -40
        space = 2
        x = self.x + off_x - space / 2
        y = self.y + off_y - space / 2
        w = self.contents.text_size(name_text).width + 26 + space
        h = 40 + space
        @name_window_frame = Window_Frame.new(x, y, w, h)
        @name_window_frame.z = self.z + 1
        x = self.x + off_x + 4
        y = self.y + off_y
        @name_window_text = Air_Text.new(x+4, y+6, name_text)
        @name_window_text.z = self.z + 2
      end
    end
    reset_window
    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 update
    super
    if @fade_in
      self.contents_opacity += 24
      if @input_number_window != nil
        @input_number_window.contents_opacity += 24
      end
      if self.contents_opacity == 255
        @fade_in = false
      end
      return
    end
    @now_text = nil if @now_text == ""
   
    if @now_text != nil and @mid_stop == false
      if @write_wait > 0
        @write_wait -= 1
        return
      end
      text_not_skip = $game_system.typing
      while true
        @max_x = @x if @max_x < @x
        @max_y = @y if @max_y < @y
        if (c = @now_text.slice!(/./m)) != nil
          if c == "\000"
            c = "\\"
          end
          if c == "\001"
            @now_text.sub!(/\[([0-9]+)\]/, "")
            color = $1.to_i
            if color >= 0 and color <= 7
              self.contents.font.color = text_color(color)
            end
            c = ""
          end
          if c == "\002"
            if @gold_window == nil and @popchar <= 0
              @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
            c = ""
          end
          if c == "\003"
            @now_text.sub!(/\[([0-9]+)\]/, "")
            speed = $1.to_i
            if speed >= 0 and speed <= 19
              @write_speed = speed
            end
            c = ""
          end
          if c == "\004"
            @now_text.sub!(/\[(.*?)\]/, "")
            buftxt = $1.dup.to_s
            if buftxt.match(/\//) == nil and buftxt != "" then
              $game_system.soundname_on_speak = "Audio/SE/" + buftxt
            else
              $game_system.soundname_on_speak = buftxt.dup
            end
            c = ""
          elsif c == "\004"
            c = ""
          end
          if c == "\005"
            @write_wait += 5
            c = ""
          end
          if c == "\006"
            @write_wait += 20
            c = ""
          end
          if c == "\016"
            text_not_skip = false
            c = ""
          end
          if c == "\017"
            text_not_skip = true
            c = ""
          end
          if c == "\020"
            @mid_stop = true
            c = ""
          end
          if c == "\021"
            terminate_message
            return
          end
          if c == "\023"
            @indent = @x
            c = ""
          end
          if c == "\024"
            @now_text.sub!(/\[([0-9]+)\]/, "")
            @opacity = $1.to_i
            c = ""
          end
          if c == "\025"
            @now_text.sub!(/\[([0-9]+)\]/, "")
            self.contents.font.size = [[$1.to_i, 6].max, 32].min
            c = ""
          end
          if c == "\026"
            @now_text.sub!(/\[([0-9]+)\]/, "")
            @x += $1.to_i
            c = ""
          end
          if c == "\027"
            @now_text.sub!(/\[(.*?)\]/, "")
            @x += ruby_draw_text(self.contents, @x, @y * line_height + (line_height - self.contents.font.size), $1, @opacity)
            if $game_system.soundname_on_speak != ""
              Audio.se_play($game_system.soundname_on_speak)
            end
            c = ""
          end
          if c == "\030"
            @now_text.sub!(/\[(.*?)\]/, "")
            self.contents.blt(@x , @y * line_height + 8, RPG::Cache.icon($1), Rect.new(0, 0, 24, 24))
           if $game_system.soundname_on_speak != ""
              Audio.se_play($game_system.soundname_on_speak)
            end
            @x += 24
            c = ""
          end
          if c == "\n"
            if @lines >= $game_temp.choice_start
              @cursor_width = [@cursor_width, @max_x - @face_indent].max
            end
            @lines += 1
            @y += 1
            @x = 0 + @indent + @face_indent
            if @lines >= $game_temp.choice_start
              @x = 8 + @indent + @face_indent
            end
            c = ""
          end
          if c != ""
            # 文字描画
            @x += opacity_draw_text(self.contents, @x, @y * line_height + (line_height - self.contents.font.size), c, @opacity)
            if $game_system.soundname_on_speak != "" then
            Audio.se_play($game_system.soundname_on_speak)
            end
          end
          if Input.press?(Input::B)
            text_not_skip = false
          end
        else
          text_not_skip = true
          break
        end
        # 終了判定
        if text_not_skip
          break
        end
      end
      @write_wait += @write_speed
      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
        if @mid_stop
          @mid_stop = false
          return
        else
          terminate_message
        end
      end
      return
    end
    if @fade_out == false and $game_temp.message_text != nil
      @contents_showing = true
      $game_temp.message_window_showing = true
      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 get_character(parameter)
    case parameter
    when 0
      return $game_player
    else
      events = $game_map.events
      return events == nil ? nil : events[parameter]
    end
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウの位置と不透明度の設定
  #--------------------------------------------------------------------------
  def reset_window
    # 判定
    if @popchar >= 0
      events = $game_map.events
      if events != nil
        character = get_character(@popchar)
        x = [[character.screen_x - 0 - self.width / 2, 4].max, 636 - self.width].min
        y = [[character.screen_y - 48 - self.height, 4].max, 476 - self.height].min
        self.x = x
        self.y = y
      end
    elsif @popchar == -1
      self.x = -4
      self.y = -4
      self.width = 648
      self.height = 488
    else
      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 # 下
          self.y = 304
        end
        self.x = 80
        if @face_file == nil
          self.width = 480
        else
          self.width = 600
          self.x -= 60
        end
        self.height = 160
      end
    end
    self.contents = Bitmap.new(self.width - 32, self.height - 32)
    if @face_file != nil
      self.contents.blt(16, 16, RPG::Cache.picture(@face_file), Rect.new(0, 0, 96, 96))
    end
    if @popchar == -1
      self.opacity = 255
      self.back_opacity = 0
    elsif $game_system.message_frame == 0
      self.opacity = 255
      self.back_opacity = 200
    else
      self.opacity = 0
      self.back_opacity = 200
    end
  end
  #--------------------------------------------------------------------------
  # ● line_height
  #--------------------------------------------------------------------------
  # 返回値:行高
  #--------------------------------------------------------------------------
  def line_height
    return 32
    if self.contents.font.size >= 20 and self.contents.font.size <= 24
      return 32
    else
      return self.contents.font.size * 15 / 10
    end
  end
  #--------------------------------------------------------------------------
  # ● 透過文字描画
  #--------------------------------------------------------------------------
  # target :描画対象。Bitmapクラスを指定。
  # x :x座標
  # y :y座標
  # str  :描画文字列
  # opacity:透過率(0~255)
  # 返回値 :文字幅(@x増加値)。
  #--------------------------------------------------------------------------
  def opacity_draw_text(target, x, y, str,opacity)
    height = target.font.size
    width = target.text_size(str).width
    opacity = [[opacity, 0].max, 255].min
    if opacity == 255
      target.draw_text(x, y, width, height, str)
      return width
    else
      if @opacity_text_buf.width < width or @opacity_text_buf.height < height
        @opacity_text_buf.dispose
        @opacity_text_buf = Bitmap.new(width, height)
      else
        @opacity_text_buf.clear
      end
      @opacity_text_buf.font.size = target.font.size
      @opacity_text_buf.draw_text(0, 0, width, height, str)
      target.blt(x, y, @opacity_text_buf, Rect.new(0, 0, width, height), opacity)
    return width
    end
  end
  def ruby_draw_text(target, x, y, str,opacity)
    sizeback = target.font.size
    target.font.size * 3 / 2 > 32 ? rubysize = 32 - target.font.size : rubysize = target.font.size / 2
    rubysize = [rubysize, 6].max
   
    opacity = [[opacity, 0].max, 255].min
    split_s = str.split(/,/)
   
    split_s[0] == nil ? split_s[0] = "" : nil
    split_s[1] == nil ? split_s[1] = "" : nil
   
    height = sizeback + rubysize
    width = target.text_size(split_s[0]).width
   
    target.font.size = rubysize
    ruby_width = target.text_size(split_s[1]).width
    target.font.size = sizeback
   
    buf_width = [target.text_size(split_s[0]).width, ruby_width].max
   
    width - ruby_width != 0 ? sub_x = (width - ruby_width) / 2 : sub_x = 0
   
    if opacity == 255
      target.font.size = rubysize
      target.draw_text(x + sub_x, y - target.font.size, target.text_size(split_s[1]).width, target.font.size, split_s[1])
      target.font.size = sizeback
      target.draw_text(x, y, width, target.font.size, split_s[0])
      return width
    else
      if @opacity_text_buf.width < buf_width or @opacity_text_buf.height < height
        @opacity_text_buf.dispose
        @opacity_text_buf = Bitmap.new(buf_width, height)
      else
        @opacity_text_buf.clear
      end
      @opacity_text_buf.font.size = rubysize
      @opacity_text_buf.draw_text(0 , 0, buf_width, rubysize, split_s[1], 1)
      @opacity_text_buf.font.size = sizeback
      @opacity_text_buf.draw_text(0 , rubysize, buf_width, sizeback, split_s[0], 1)
      if sub_x >= 0
        target.blt(x, y - rubysize, @opacity_text_buf, Rect.new(0, 0, buf_width, height), opacity)
      else
        target.blt(x + sub_x, y - rubysize, @opacity_text_buf, Rect.new(0, 0, buf_width, height), opacity)
      end
      return width
    end
  end
  #--------------------------------------------------------------------------
  # ● \V 变换
  #--------------------------------------------------------------------------
  def convart_value(option, index)
    option == nil ? option = "" : nil
    option.downcase!
    case option
      when "i"
        unless $data_items[index].name == nil
          r = sprintf("\030[%s]%s", $data_items[index].icon_name, $data_items[index].name)
        end
      when "w"
        unless $data_weapons[index].name == nil
          r = sprintf("\030[%s]%s", $data_weapons[index].icon_name, $data_weapons[index].name)
        end
      when "a"
        unless $data_armors[index].name == nil
          r = sprintf("\030[%s]%s", $data_armors[index].icon_name, $data_armors[index].name)
        end
      when "s"
        unless $data_skills[index].name == nil
          r = sprintf("\030[%s]%s", $data_skills[index].icon_name, $data_skills[index].name)
        end
      else
      r = $game_variables[index]
    end
    r == nil ? r = "" : nil
    return r
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    terminate_message
    if @gaiji_cache != nil
      unless @gaiji_cache.disposed?
        @gaiji_cache.dispose
      end
    end
    unless @opacity_text_buf.disposed?
      @opacity_text_buf.dispose
    end
    $game_temp.message_window_showing = false
    if @input_number_window != nil
      @input_number_window.dispose
    end
    super
  end
  #--------------------------------------------------------------------------
  # ● 矩形更新
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index >= 0
      n = $game_temp.choice_start + @index
      self.cursor_rect.set(4 + @indent + @face_indent, n * 32 + 4, @cursor_width, 32)
    else
      self.cursor_rect.empty
    end
  end
end
#==============================================================================
# ■ Window_Frame (枠だけで中身の無いウィンドウ)
#==============================================================================
class Window_Frame < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
    super(x, y, width, height)
    self.contents = nil
    self.back_opacity = 200
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    super
    end
  end
#==============================================================================
# ■ Air_Text (何も無いところに文字描写 = 枠の無い瞬間表示メッセージウィンドウ)
#==============================================================================
class Air_Text < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(x, y, designate_text)
    super(x-16, y-16, 32 + designate_text.size * 12, 56)
    self.opacity = 0
    self.back_opacity = 0
    self.contents = Bitmap.new(self.width - 32, self.height - 32)
    w = self.contents.width
    h = self.contents.height
    self.contents.draw_text(0, 0, w, h, designate_text)
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    self.contents.clear
    super
  end
end
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-10-2
帖子
10
18
发表于 2009-10-6 14:56:02 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2009-9-14
帖子
14
19
 楼主| 发表于 2009-10-6 16:49:07 | 只看该作者
只写\L[001] 之后 开始写对话
nankai9453 发表于 2009-10-6 14:56


這個我知道了,謝謝

現在就到腳本的問題=.=

有人幫到我嗎?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
34 小时
注册时间
2006-6-19
帖子
111
20
发表于 2009-10-6 17:35:12 | 只看该作者
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================
  4. #——说明
  5. #默认为一个字一个字的方式,如果需要一次全部显示,
  6. #请在游戏中使用脚本:$game_system.typing = true
  7. #默认对话字没有声音,如果需要声音,
  8. #请在游戏中使用脚本:$game_system.soundname_on_speak = "这里输入文件名"
  9. #我唯一一个见过“胡乱配音”的游戏是天使帝国2代,该游戏说话的时候每个字符随机发一个外星语音
  10. # 其他在对话中可以使用的功能:
  11. # \n[1]:显示1号角色的姓名
  12. # \name[李逍遥]:显示一个“李逍遥”方框,表示说话人姓名
  13. # \p[1]:对话框出现在1号事件的上方
  14. # \p[0]:主人公上方出现对话框
  15. #——————————————————使用\p功能后可以自动调整对话框大小
  16. # \\:显示"\"这个符号
  17. # \v[1] :显示变量1
  18. # \v[a1] :显示防具1
  19. # \v[w1] :显示武器1
  20. # \v[i1] :显示物品1
  21. # \v[s1] :显示特技1
  22. # \c[1-8]:更改颜色
  23. # \g:显示金钱窗口
  24. # \a[SE文件名]:对话的时候播放SE
  25. # \s[1-19]:更改弹字的速度
  26. # \. :停顿一刹那(1、2帧)
  27. # \| :停顿片刻(20帧)
  28. # \> :文字不用打字方式
  29. # \< :文字使用打字方式
  30. # \! :等待玩家按回车再继续
  31. # \~ :文字直接消失
  32. # \I :下一行从这个位置开始
  33. # \o[123]:文字透明度改为123,模拟将死之人(汗)
  34. # \h[12]:改用12号字
  35. # \b[50]:空50象素
  36. # \K[今天天气不错]:在出现“今天天气不错”这几个字的时候播放$game_system.soundname_on_speak设置的音效
  37. # \L[001]:在左边显示图片“Graphics/battlers/66rpg_001_h.png”
  38. # \R[001]:在右边显示图片“Graphics/battlers/66rpg_001_h.png”
  39. # \Lk:清除左边的图像
  40. # \Rk:清除右边的图像
  41. #==============================================================================
  42. # ■ Game_System
  43. #------------------------------------------------------------------------------
  44. #  处理系统附属数据的类。也可执行诸如 BGM 管理之类的功能。本类的实例请参考
  45. # $game_system 。
  46. #==============================================================================
  47. class Game_System
  48. attr_accessor :typing
  49. attr_accessor :soundname_on_speak
  50. alias carol3_ini initialize
  51. def initialize
  52. carol3_ini
  53. @typing = true
  54. @soundname_on_speak = nil
  55. end
  56. end
  57. $加密 = true
  58. #==============================================================================
  59. # ■ Window_Message
  60. #------------------------------------------------------------------------------
  61. class Window_Message < Window_Selectable
  62. #--------------------------------------------------------------------------
  63. # ● 初始化状态
  64. #--------------------------------------------------------------------------
  65. def initialize
  66. super(80, 304, 680, 160)  
  67. self.contents = Bitmap.new(width - 32, height - 32)
  68. self.visible = false
  69. self.z = 9998
  70. @fade_in = false
  71. @fade_out = false
  72. @contents_showing = false
  73. @cursor_width = 0
  74. self.active = false
  75. self.index = -1
  76. #★★★★★★★★★限时选项系统★★★★★★★★★
  77. @color1=Color.new(238,150,122,255)
  78. #★★★★★★★★★★★★★★★★★★★★★★★★★
  79. if $game_system.soundname_on_speak == nil then
  80. $game_system.soundname_on_speak = ""
  81. end
  82. @opacity_text_buf = Bitmap.new(32, 32)
  83. end
  84. #--------------------------------------------------------------------------
  85. # ● 释放
  86. #--------------------------------------------------------------------------
  87. def dispose
  88. terminate_message
  89. $game_temp.message_window_showing = false
  90. if @input_number_window != nil
  91. @input_number_window.dispose
  92. end
  93. super
  94. end
  95. #--------------------------------------------------------------------------
  96. # ● 处理信息结束
  97. #--------------------------------------------------------------------------
  98. def terminate_message
  99. self.active = false
  100. self.pause = false
  101. self.index = -1
  102. self.contents.clear
  103. # 清除显示中标志
  104. @contents_showing = false
  105. # 呼叫信息调用
  106. if $game_temp.message_proc != nil
  107. $game_temp.message_proc.call
  108. end
  109. # 清除文章、选择项、输入数值的相关变量
  110. $game_temp.message_text = nil
  111. $game_temp.message_proc = nil
  112. $game_temp.choice_start = 99
  113. $game_temp.choice_max = 0
  114. $game_temp.choice_cancel_type = 0
  115. $game_temp.choice_proc = nil
  116. $game_temp.num_input_start = 99
  117. $game_temp.num_input_variable_id = 0
  118. $game_temp.num_input_digits_max = 0
  119. # 开放金钱窗口
  120. if @gold_window != nil
  121. @gold_window.dispose
  122. @gold_window = nil
  123. end
  124. if @name_window_frame != nil
  125. @name_window_frame.dispose
  126. @name_window_frame = nil
  127. end
  128. if @name_window_text != nil
  129. @name_window_text.dispose
  130. @name_window_text = nil
  131. end
  132. if @right_picture != nil and @right_keep == true
  133. @right_picture.dispose
  134. end
  135. if @left_picture != nil and @left_keep == true
  136. @left_picture.dispose
  137. end
  138. end
  139. def refresh
  140. # 初期化
  141. self.contents.clear
  142. self.contents.font.color = normal_color
  143. self.contents.font.size = Font.default_size
  144. @x = @y = @max_x = @max_y = @indent = @lines = 0
  145. @left_keep = @right_keep = false
  146. @face_indent = 0
  147. @opacity = 255
  148. @cursor_width = 0
  149. @write_speed = 0
  150. @write_wait = 0
  151. @mid_stop = false
  152. @face_file = nil
  153. @popchar = -2
  154. if $game_temp.choice_start == 0
  155. @x = 8
  156. end
  157. if $game_temp.message_text != nil
  158. @now_text = $game_temp.message_text
  159. #——头像设置
  160.   if (/\\[Ff]\[(.+?)\]/.match(@now_text))!=nil then
  161. @face_file = $1 + ".png"
  162. @x = @face_indent = 128
  163. if FileTest.exist?("Graphics/Pictures/" + $1 + ".png")
  164. self.contents.blt(16, 16, RPG::Cache.picture(@face_file), Rect.new(0, 0, 96, 96))
  165. end
  166. @now_text.gsub!(/\\[Ff]\[(.*?)\]/) { "" }
  167. end
  168. #——左半身像设置
  169. if (/\\[Ll]\[(.+?)\]/.match(@now_text))!=nil then
  170. @face = "66rpg_" + $1 + "_h.png"
  171. if $加密 == true
  172. if @left_picture != nil
  173. @left_picture.dispose
  174. end
  175. @left_picture = Sprite.new
  176. @left_picture.bitmap = Bitmap.new("Graphics/battlers/#{@face}")
  177. @left_picture.y = 480-@left_picture.bitmap.height
  178. @left_picture.x = 0
  179. @left_picture.z = 99999
  180. @left_picture.mirror = true
  181. @now_text.gsub!(/\\[Ll]\[(.*?)\]/) { "" }
  182. else
  183. if FileTest.exist?("Graphics/battlers/#{@face}")
  184. if @left_picture != nil
  185. @left_picture.dispose
  186. end
  187. @left_picture = Sprite.new
  188. @left_picture.bitmap = Bitmap.new("Graphics/battlers/#{@face}")
  189. @left_picture.y = 480-@left_picture.bitmap.height
  190. @left_picture.x = 0
  191. @left_picture.z = 99999
  192. @left_picture.mirror = true
  193. @now_text.gsub!(/\\[Ll]\[(.*?)\]/) { "" }
  194. end
  195. end
  196. end
  197. #——右半身像设置
  198. if (/\\[Rr]\[(.+?)\]/.match(@now_text))!=nil then
  199. @face = "66rpg_" + $1 + "_h.png"
  200. if $加密 == true
  201. if @right_picture != nil
  202. @right_picture.dispose
  203. end
  204. @right_picture = Sprite.new
  205. @right_picture.bitmap = Bitmap.new("Graphics/battlers/#{@face}")
  206. @right_picture.y = 480-@right_picture.bitmap.height
  207. @right_picture.x = 640-@right_picture.bitmap.width
  208. @now_text.gsub!(/\\[Rr]\[(.*?)\]/) { "" }
  209. else
  210. if FileTest.exist?("Graphics/battlers/#{@face}")
  211. if @right_picture != nil
  212. @right_picture.dispose
  213. end
  214. @right_picture = Sprite.new
  215. @right_picture.bitmap = Bitmap.new("Graphics/battlers/#{@face}")
  216. @right_picture.y = 480-@right_picture.bitmap.height
  217. @right_picture.x = 640-@right_picture.bitmap.width
  218. @now_text.gsub!(/\\[Rr]\[(.*?)\]/) { "" }
  219. end
  220. end
  221. end
  222. if (/\\[Rr]k/.match(@now_text)) != nil
  223. @right_keep = true
  224. @now_text.sub!(/\\[Rr]k/) { "" }
  225. end
  226. if (/\\[Ll]k/.match(@now_text)) != nil
  227. @left_keep = true
  228. @now_text.sub!(/\\[Ll]k/) { "" }
  229. end
  230. # 显示人物姓名
  231. name_window_set = false
  232. if (/\\[Nn]ame\[(.+?)\]/.match(@now_text)) != nil
  233. name_window_set = true
  234. name_text = $1
  235. @now_text.sub!(/\\[Nn]ame\[(.*?)\]/) { "" }
  236. end
  237. # 文字位置的判定
  238. if (/\\[Pp]\[([-1,0-9]+)\]/.match(@now_text))!=nil then
  239. @popchar = $1.to_i
  240. if @popchar == -1
  241. @x = @indent = 48
  242. @y = 4
  243. end
  244. @now_text.gsub!(/\\[Pp]\[([-1,0-9]+)\]/) { "" }
  245. end
  246. # 开始
  247. begin
  248. last_text = @now_text.clone
  249. @now_text.gsub!(/\\[Vv]\[([IiWwAaSs]?)([0-9]+)\]/) { convart_value($1, $2.to_i) }
  250. end until @now_text == last_text
  251. @now_text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  252. $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  253. end
  254. @now_text.gsub!(/\\\\/) { "\000" }
  255. @now_text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  256. @now_text.gsub!(/\\[Gg]/) { "\002" }
  257. @now_text.gsub!(/\\[Ss]\[([0-9]+)\]/) { "\003[#{$1}]" }
  258. @now_text.gsub!(/\\[Aa]\[(.*?)\]/) { "\004[#{$1}]" }
  259. @now_text.gsub!(/\\[.]/) { "\005" }
  260. @now_text.gsub!(/\\[|]/) { "\006" }
  261. @now_text.gsub!(/\\[>]/) { "\016" }
  262. @now_text.gsub!(/\\[<]/) { "\017" }
  263. @now_text.gsub!(/\\[!]/) { "\020" }
  264. @now_text.gsub!(/\\[~]/) { "\021" }
  265. @now_text.gsub!(/\\[Ii]/) { "\023" }
  266. @now_text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "\024[#{$1}]" }
  267. @now_text.gsub!(/\\[Hh]\[([0-9]+)\]/) { "\025[#{$1}]" }
  268. @now_text.gsub!(/\\[Bb]\[([0-9]+)\]/) { "\026[#{$1}]" }
  269. @now_text.gsub!(/\\[Kk]\[(.*?)\]/) { "\027[#{$1}]" }
  270. if @popchar >= 0
  271. @text_save = @now_text.clone
  272. @max_x = 0
  273. @max_y = 4
  274. for i in 0..3
  275. line = @now_text.split(/\n/)[3-i]
  276. @max_y -= 1 if line == nil and @max_y <= 4-i
  277. next if line == nil
  278. cx = contents.text_size(line).width
  279. @max_x = cx if cx > @max_x
  280. end
  281. self.width = @max_x + 48 + @face_indent
  282. self.height = (@max_y - 1) * 32 + 64
  283. else
  284. @max_x = self.width - 32 - @face_indent
  285. end
  286. reset_window
  287. if name_window_set
  288. off_x = 15
  289. off_y = -25
  290. space = 2
  291. x = self.x + off_x - space / 2
  292. y = self.y + off_y - space / 2
  293. w = self.contents.text_size(name_text).width + 26 + space
  294. h = 40 + space
  295. @name_window_frame = Window_Frame.new(x, y, w, h)
  296. @name_window_frame.z = self.z + 1
  297. x = self.x + off_x + 4
  298. y = self.y + off_y
  299. @name_window_text = Air_Text.new(x+4, y+6, name_text)
  300. @name_window_text.z = self.z + 2
  301. end
  302. end
  303. reset_window
  304. if $game_temp.choice_max > 0
  305. @item_max = $game_temp.choice_max
  306. self.active = true
  307. self.index = 0
  308. #★★★★★★★限时选项系统★★★★★★★★★★
  309. @count=0
  310. if $game_variables[100]>0
  311. @sel=true
  312. end
  313. #★★★★★★★★★★★★★★★★★★★★★★★★★
  314. end
  315. if $game_temp.num_input_variable_id > 0
  316. digits_max = $game_temp.num_input_digits_max
  317. number = $game_variables[$game_temp.num_input_variable_id]
  318. @input_number_window = Window_InputNumber.new(digits_max)
  319. @input_number_window.number = number
  320. @input_number_window.x = self.x + 8
  321. @input_number_window.y = self.y + $game_temp.num_input_start * 32
  322. end
  323. end
  324. #--------------------------------------------------------------------------
  325. # ● 更新
  326. #--------------------------------------------------------------------------
  327. def update
  328. #★★★★★★★★限时选项系统★★★★★★★★★★
  329. if @sel
  330. @count+=1
  331. self.contents.fill_rect(0, 0, 480*@count/$game_variables[100],2 , @color1)
  332. # p @count
  333. if ($game_temp.choice_max > 0 and @count>=$game_variables[100])#即等待的帧数100号变量
  334. $game_system.se_play($data_system.decision_se)
  335. $game_temp.choice_proc.call($game_variables[101])#即默认选择项101号变量
  336. $game_variables[102]=@count
  337. @count=0
  338. @sel=false
  339. terminate_message
  340. end
  341. end
  342. #★★★★★★★★★★★★★★★★★★★★★★★★★   
  343. super
  344. if @fade_in
  345. self.contents_opacity += 24
  346. if @input_number_window != nil
  347. @input_number_window.contents_opacity += 24
  348. end
  349. if self.contents_opacity == 255
  350. @fade_in = false
  351. end
  352. return
  353. end
  354. @now_text = nil if @now_text == ""
  355. if @now_text != nil and @mid_stop == false
  356. if @write_wait > 0
  357. @write_wait -= 1
  358. return
  359. end
  360. text_not_skip = $game_system.typing
  361. while true
  362. @max_x = @x if @max_x < @x
  363. @max_y = @y if @max_y < @y
  364. if (c = @now_text.slice!(/./m)) != nil
  365. if c == "\000"
  366. c = "\\"
  367. end
  368. if c == "\001"
  369. @now_text.sub!(/\[([0-9]+)\]/, "")
  370. color = $1.to_i
  371. if color >= 0 and color <= 7
  372. self.contents.font.color = text_color(color)
  373. end
  374. c = ""
  375. end
  376. if c == "\002"
  377. if @gold_window == nil and @popchar <= 0
  378. @gold_window = Window_Gold.new
  379. @gold_window.x = 600 - @gold_window.width
  380. if $game_temp.in_battle
  381. @gold_window.y = 192
  382. else
  383. @gold_window.y = self.y >= 128 ? 32 : 384
  384. end
  385. @gold_window.opacity = self.opacity
  386. @gold_window.back_opacity = self.back_opacity
  387. end
  388. c = ""
  389. end
  390. if c == "\003"
  391. @now_text.sub!(/\[([0-9]+)\]/, "")
  392. speed = $1.to_i
  393. if speed >= 0 and speed <= 19
  394. @write_speed = speed
  395. end
  396. c = ""
  397. end
  398. if c == "\004"
  399. @now_text.sub!(/\[(.*?)\]/, "")
  400. buftxt = $1.dup.to_s
  401. if buftxt.match(/\//) == nil and buftxt != "" then
  402. $game_system.soundname_on_speak = "Audio/SE/" + buftxt
  403. else
  404. $game_system.soundname_on_speak = buftxt.dup
  405. end
  406. c = ""
  407. elsif c == "\004"
  408. c = ""
  409. end
  410. if c == "\005"
  411. @write_wait += 5
  412. c = ""
  413. end
  414. if c == "\006"
  415. @write_wait += 20
  416. c = ""
  417. end
  418. if c == "\016"
  419. text_not_skip = false
  420. c = ""
  421. end
  422. if c == "\017"
  423. text_not_skip = true
  424. c = ""
  425. end
  426. if c == "\020"
  427. @mid_stop = true
  428. c = ""
  429. end
  430. if c == "\021"
  431. terminate_message
  432. return
  433. end
  434. if c == "\023"
  435. @indent = @x
  436. c = ""
  437. end
  438. if c == "\024"
  439. @now_text.sub!(/\[([0-9]+)\]/, "")
  440. @opacity = $1.to_i
  441. c = ""
  442. end
  443. if c == "\025"
  444. @now_text.sub!(/\[([0-9]+)\]/, "")
  445. self.contents.font.size = [[$1.to_i, 6].max, 32].min
  446. c = ""
  447. end
  448. if c == "\026"
  449. @now_text.sub!(/\[([0-9]+)\]/, "")
  450. @x += $1.to_i
  451. c = ""
  452. end
  453. if c == "\027"
  454. @now_text.sub!(/\[(.*?)\]/, "")
  455. @x += ruby_draw_text(self.contents, @x, @y * line_height + (line_height - self.contents.font.size), $1, @opacity)
  456. if $game_system.soundname_on_speak != ""
  457. Audio.se_play($game_system.soundname_on_speak)
  458. end
  459. c = ""
  460. end
  461. if c == "\030"
  462. @now_text.sub!(/\[(.*?)\]/, "")
  463. self.contents.blt(@x , @y * line_height + 8, RPG::Cache.icon($1), Rect.new(0, 0, 24, 24))
  464. if $game_system.soundname_on_speak != ""
  465. Audio.se_play($game_system.soundname_on_speak)
  466. end
  467. @x += 24
  468. c = ""
  469. end
  470. if c == "\n"
  471. if @lines >= $game_temp.choice_start
  472. @cursor_width = [@cursor_width, @max_x - @face_indent].max
  473. end
  474. @lines += 1
  475. @y += 1
  476. @x = 0 + @indent + @face_indent
  477. if @lines >= $game_temp.choice_start
  478. @x = 8 + @indent + @face_indent
  479. end
  480. c = ""
  481. end
  482. if c != ""
  483. # 文字描画
  484. @x += opacity_draw_text(self.contents, @x, @y * line_height + (line_height - self.contents.font.size), c, @opacity)
  485. if $game_system.soundname_on_speak != "" then
  486. Audio.se_play($game_system.soundname_on_speak)
  487. end
  488. end
  489. if Input.press?(Input::B)
  490. text_not_skip = false
  491. end
  492. else
  493. text_not_skip = true
  494. break
  495. end
  496. # 終了判定
  497. if text_not_skip
  498. break
  499. end
  500. end
  501. @write_wait += @write_speed
  502. return
  503. end
  504. if @input_number_window != nil
  505. @input_number_window.update
  506. # 決定
  507. if Input.trigger?(Input::C)
  508. $game_system.se_play($data_system.decision_se)
  509. $game_variables[$game_temp.num_input_variable_id] =
  510. @input_number_window.number
  511. $game_map.need_refresh = true
  512. @input_number_window.dispose
  513. @input_number_window = nil
  514. terminate_message
  515. end
  516. return
  517. end
  518. if @contents_showing
  519. if $game_temp.choice_max == 0
  520. self.pause = true
  521. end
  522.       if Input.trigger?(Input::B)
  523.         if $game_temp.choice_max > 0 && $game_temp.choice_start > 0
  524.           $game_temp.choice_max = 0
  525.           $game_temp.choice_start = 99
  526.           $game_system.map_interpreter.index=$game_system.map_interpreter.index - 2
  527.           while($game_system.map_interpreter.list[$game_system.map_interpreter.index].code == 401)
  528.             $game_system.map_interpreter.index=$game_system.map_interpreter.index - 1
  529.           end
  530.         else
  531.           $game_system.map_interpreter.index=$game_system.map_interpreter.index - 1
  532.           while($game_system.map_interpreter.list[$game_system.map_interpreter.index].code == 401)
  533.             $game_system.map_interpreter.index=$game_system.map_interpreter.index - 1
  534.           end
  535.         end
  536.         $scene = Scene_Menu.new
  537.       end
  538. # 決定
  539. if Input.trigger?(Input::C)
  540. if $game_temp.choice_max > 0
  541. $game_system.se_play($data_system.decision_se)
  542. $game_temp.choice_proc.call(self.index)
  543. #★★★★★★★限时选项系统★★★★★★★★★★★
  544. $game_variables[102]=@count
  545. if @sel
  546. @count=0
  547. @sel=false
  548. end
  549. #★★★★★★★★★★★★★★★★★★★★★★★★★
  550. end
  551. if @mid_stop
  552. @mid_stop = false
  553. return
  554. else
  555. terminate_message
  556. end
  557. end
  558. return
  559. end
  560. if @fade_out == false and $game_temp.message_text != nil
  561. @contents_showing = true
  562. $game_temp.message_window_showing = true
  563. refresh
  564. Graphics.frame_reset
  565. self.visible = true
  566. self.contents_opacity = 0
  567. if @input_number_window != nil
  568. @input_number_window.contents_opacity = 0
  569. end
  570. @fade_in = true
  571. return
  572. end
  573. if self.visible
  574. @fade_out = true
  575. self.opacity -= 48
  576. if self.opacity == 0
  577. self.visible = false
  578. @fade_out = false
  579. $game_temp.message_window_showing = false
  580. end
  581. return
  582. end
  583. end
  584. #--------------------------------------------------------------------------
  585. # ● 获得字符
  586. #--------------------------------------------------------------------------
  587. def get_character(parameter)
  588. case parameter
  589. when 0
  590. return $game_player
  591. else
  592. events = $game_map.events
  593. return events == nil ? nil : events[parameter]
  594. end
  595. end
  596. #--------------------------------------------------------------------------
  597. # ● ウィンドウの位置と不透明度の設定
  598. #--------------------------------------------------------------------------
  599. def reset_window
  600. # 判定
  601. if @popchar >= 0
  602. events = $game_map.events
  603. if events != nil
  604. character = get_character(@popchar)
  605. x = [[character.screen_x - 0 - self.width / 2, 4].max, 636 - self.width].min
  606. y = [[character.screen_y - 48 - self.height,4].max, 476 - self.height].min
  607. self.x = x
  608. self.y = y
  609. end
  610. elsif @popchar == -1
  611. self.x = -4
  612. self.y = -4
  613. self.width = 648
  614. self.height = 488
  615. else
  616. if $game_temp.in_battle
  617. self.y = 16
  618. else
  619. case $game_system.message_position
  620. when 0 # 上
  621. self.y = 16
  622. when 1 # 中
  623. self.y = 160
  624. when 2 # 下
  625. self.y = 317
  626. end
  627. self.x = 5
  628. if @face_file == nil
  629. self.width = 630
  630. else
  631. self.width = 600
  632. self.x -= 60
  633. end
  634. self.height = 160
  635. end
  636. end
  637. self.contents = Bitmap.new(self.width - 32, self.height - 32)
  638. if @face_file != nil
  639. self.contents.blt(16, 16, RPG::Cache.picture(@face_file), Rect.new(0, 0, 96, 96))
  640. end
  641. if @popchar == -1
  642. self.opacity = 255
  643. self.back_opacity = 0
  644. elsif $game_system.message_frame == 0
  645. self.opacity = 255
  646. self.back_opacity = 200
  647. else
  648. self.opacity = 0
  649. self.back_opacity = 200
  650. end
  651. end
  652. #--------------------------------------------------------------------------
  653. # ● line_height
  654. #--------------------------------------------------------------------------
  655. # 返回値:行高
  656. #--------------------------------------------------------------------------
  657. def line_height
  658. return 32
  659. if self.contents.font.size >= 20 and self.contents.font.size <= 24
  660. return 32
  661. else
  662. return self.contents.font.size * 15 / 10
  663. end
  664. end
  665. #--------------------------------------------------------------------------
  666. # ● 透過文字描画
  667. #--------------------------------------------------------------------------
  668. # target :描画対象。Bitmapクラスを指定。
  669. # x :x座標
  670. # y :y座標
  671. # str  :描画文字列
  672. # opacity:透過率(0~255)
  673. # 返回値 :文字幅(@x増加値)。
  674. #--------------------------------------------------------------------------
  675. def opacity_draw_text(target, x, y, str,opacity)
  676. height = target.font.size
  677. width = target.text_size(str).width
  678. opacity = [[opacity, 0].max, 255].min
  679. if opacity == 255
  680. target.draw_text(x, y, width, height, str)
  681. return width
  682. else
  683. if @opacity_text_buf.width < width or @opacity_text_buf.height < height
  684. @opacity_text_buf.dispose
  685. @opacity_text_buf = Bitmap.new(width, height)
  686. else
  687. @opacity_text_buf.clear
  688. end
  689. @opacity_text_buf.font.size = target.font.size
  690. @opacity_text_buf.draw_text(0, 0, width, height, str)
  691. target.blt(x, y, @opacity_text_buf, Rect.new(0, 0, width, height), opacity)
  692. return width
  693. end
  694. end
  695. def ruby_draw_text(target, x, y, str,opacity)
  696. sizeback = target.font.size
  697. target.font.size * 3 / 2 > 32 ? rubysize = 32 - target.font.size : rubysize = target.font.size / 2
  698. rubysize = [rubysize, 6].max
  699. opacity = [[opacity, 0].max, 255].min
  700. split_s = str.split(/,/)
  701. split_s[0] == nil ? split_s[0] = "" : nil
  702. split_s[1] == nil ? split_s[1] = "" : nil
  703. height = sizeback + rubysize
  704. width = target.text_size(split_s[0]).width
  705. target.font.size = rubysize
  706. ruby_width = target.text_size(split_s[1]).width
  707. target.font.size = sizeback
  708. buf_width = [target.text_size(split_s[0]).width, ruby_width].max
  709. width - ruby_width != 0 ? sub_x = (width - ruby_width) / 2 : sub_x = 0
  710. if opacity == 255
  711. target.font.size = rubysize
  712. target.draw_text(x + sub_x, y - target.font.size, target.text_size(split_s[1]).width, target.font.size, split_s[1])
  713. target.font.size = sizeback
  714. target.draw_text(x, y, width, target.font.size, split_s[0])
  715. return width
  716. else
  717. if @opacity_text_buf.width < buf_width or @opacity_text_buf.height < height
  718. @opacity_text_buf.dispose
  719. @opacity_text_buf = Bitmap.new(buf_width, height)
  720. else
  721. @opacity_text_buf.clear
  722. end
  723. @opacity_text_buf.font.size = rubysize
  724. @opacity_text_buf.draw_text(0 , 0, buf_width, rubysize, split_s[1], 1)
  725. @opacity_text_buf.font.size = sizeback
  726. @opacity_text_buf.draw_text(0 , rubysize, buf_width, sizeback, split_s[0], 1)
  727. if sub_x >= 0
  728. target.blt(x, y - rubysize, @opacity_text_buf, Rect.new(0, 0, buf_width, height), opacity)
  729. else
  730. target.blt(x + sub_x, y - rubysize, @opacity_text_buf, Rect.new(0, 0, buf_width, height), opacity)
  731. end
  732. return width
  733. end
  734. end
  735. #--------------------------------------------------------------------------
  736. # ● \V 变换
  737. #--------------------------------------------------------------------------
  738. def convart_value(option, index)
  739. option == nil ? option = "" : nil
  740. option.downcase!
  741. case option
  742. when "i"
  743. unless $data_items[index].name == nil
  744. r = sprintf("\030[%s]%s", $data_items[index].icon_name, $data_items[index].name)
  745. end
  746. when "w"
  747. unless $data_weapons[index].name == nil
  748. r = sprintf("\030[%s]%s", $data_weapons[index].icon_name, $data_weapons[index].name)
  749. end
  750. when "a"
  751. unless $data_armors[index].name == nil
  752. r = sprintf("\030[%s]%s", $data_armors[index].icon_name, $data_armors[index].name)
  753. end
  754. when "s"
  755. unless $data_skills[index].name == nil
  756. r = sprintf("\030[%s]%s", $data_skills[index].icon_name, $data_skills[index].name)
  757. end
  758. else
  759. r = $game_variables[index]
  760. end
  761. r == nil ? r = "" : nil
  762. return r
  763. end
  764. #--------------------------------------------------------------------------
  765. # ● 解放
  766. #--------------------------------------------------------------------------
  767. def dispose
  768. terminate_message
  769. if @gaiji_cache != nil
  770. unless @gaiji_cache.disposed?
  771. @gaiji_cache.dispose
  772. end
  773. end
  774. unless @opacity_text_buf.disposed?
  775. @opacity_text_buf.dispose
  776. end
  777. $game_temp.message_window_showing = false
  778. if @input_number_window != nil
  779. @input_number_window.dispose
  780. end
  781. super
  782. end
  783. #--------------------------------------------------------------------------
  784. # ● 矩形更新
  785. #--------------------------------------------------------------------------
  786. def update_cursor_rect
  787. if @index >= 0
  788. n = $game_temp.choice_start + @index
  789. self.cursor_rect.set(4 + @indent + @face_indent, n * 32 + 4, @cursor_width, 32)
  790. else
  791. self.cursor_rect.empty
  792. end
  793. end
  794. end
  795. #==============================================================================
  796. # ■ Window_Frame (枠だけで中身の無いウィンドウ)
  797. #==============================================================================
  798. class Window_Frame < Window_Base
  799. #--------------------------------------------------------------------------
  800. # ● オブジェクト初期化
  801. #--------------------------------------------------------------------------
  802. def initialize(x, y, width, height)
  803. super(x, y, width, height)
  804. self.contents = nil
  805. self.back_opacity = 200
  806. end
  807. #--------------------------------------------------------------------------
  808. # ● 解放
  809. #--------------------------------------------------------------------------
  810. def dispose
  811. super
  812. end
  813. end
  814. #==============================================================================
  815. # ■ Air_Text (何も無いところに文字描写 = 枠の無い瞬間表示メッセージウィンドウ)
  816. #==============================================================================
  817. class Air_Text < Window_Base
  818. #--------------------------------------------------------------------------
  819. # ● オブジェクト初期化
  820. #--------------------------------------------------------------------------
  821. def initialize(x, y, designate_text)
  822. super(x-13, y-14, 32 + designate_text.size * 12, 56)
  823. self.opacity = 0
  824. self.back_opacity = 0
  825. self.contents = Bitmap.new(self.width - 32, self.height - 32)
  826. w = self.contents.width
  827. h = self.contents.height
  828. self.contents.font.color = Color.new(238,150,122,255)
  829. self.contents.draw_text(0, 0, w, h, designate_text)
  830. self.contents.font.color = normal_color
  831. end
  832. #--------------------------------------------------------------------------
  833. # ● 解放
  834. #--------------------------------------------------------------------------
  835. def dispose
  836. self.contents.clear
  837. super
  838. end
  839. end
  840. #==============================================================================
  841. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  842. #==============================================================================
复制代码
用我自己专用的吧= =大小自己改改吧
http://rpg.blue/viewthread.php?tid=133968&extra=page%3D1小桃的假期 从场景到人物全重做........能算原创不?- -
回复 支持 反对

使用道具 举报

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

本版积分规则

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

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-2 02:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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