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

Project1

 找回密码
 注册会员
搜索
查看: 3766|回复: 11
打印 上一主题 下一主题

[已经过期] 请问叶子的任务系统的任务资料放在那里啊

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
12 小时
注册时间
2013-2-2
帖子
7
跳转到指定楼层
1
 楼主| 发表于 2013-2-8 16:39:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
就是那些名称简介什么的
要是有范例就最好了  
先谢过各位了.....

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

2
发表于 2013-2-8 17:50:36 | 只看该作者
脚本内
然后在事件脚本内呼出任务内容
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
12 小时
注册时间
2013-2-2
帖子
7
3
 楼主| 发表于 2013-2-8 18:26:26 | 只看该作者
美丽晨露 发表于 2013-2-8 17:50
脚本内
然后在事件脚本内呼出任务内容

请问是新建一个脚本么
还是在哪个脚本呢?
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

4
发表于 2013-2-8 18:34:30 | 只看该作者
lzhyt88 发表于 2013-2-8 18:26
请问是新建一个脚本么
还是在哪个脚本呢?

在原任务脚本内编辑内容
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
12 小时
注册时间
2013-2-2
帖子
7
5
 楼主| 发表于 2013-2-8 20:37:33 | 只看该作者
美丽晨露 发表于 2013-2-8 18:34
在原任务脚本内编辑内容

感谢不已
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
12 小时
注册时间
2013-2-2
帖子
7
6
 楼主| 发表于 2013-2-8 20:45:56 | 只看该作者
美丽晨露 发表于 2013-2-8 18:34
在原任务脚本内编辑内容

请问有什么范例么.......
还是有点不懂呢.....
我找到的范例全都不能下了......
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

7
发表于 2013-2-8 20:57:20 | 只看该作者
lzhyt88 发表于 2013-2-8 20:45
请问有什么范例么.......
还是有点不懂呢.....
我找到的范例全都不能下了...... ...

范例我也没有啊
不过可以帮你做个
不知道有没脚本而已
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
12 小时
注册时间
2013-2-2
帖子
7
8
 楼主| 发表于 2013-2-8 21:10:14 | 只看该作者
美丽晨露 发表于 2013-2-8 20:57
范例我也没有啊
不过可以帮你做个
不知道有没脚本而已

=begin
--------------------------------------------------------------------------
详尽任务显示界面 v2.1
--------------------------------------------------------------------------
By 叶子

日期与更新
3-29-2006 -v1.0
4-3-2006  -v2.0
-可以改变文字颜色,显示变量,显示图标,显示图片
-大幅简化了编写任务内容的过程,加入自动换行功能
-精简了窗口,使其还可以用作图鉴系统、日记系统等等
4-6-2006  -v2.1
-增加了获得全部任务与删除全部任务命令
-改正通假字,修改了示例任务3
--------------------------------------------------------------------------
顾名思义,就是显示任务资料的界面
任务资料要预先在这里设定好
下载范例工程,能帮助你更快更好地掌握使用方法
--------------------------------------------------------------------------
使用方法:

1、召唤任务显示界面:$scene = Scene_Task.new

可以在事件中的“脚本”指令加入这段东西,又或者修改 Scene_Menu 来增加一个显示
任务的选项。如果是修改 Scene_Menu 增加选项的话,在脚本倒数第30行左右,
把 $scene = Scene_Map.new 修改成 $scene = Scene_Menu.new(任务界面index)

2、设置任务资料

  2.1、相关内容解析
  
  所有内容文字必须用双引号括住
  
  名称:任务的名字(显示在左边窗口中),大小为208×32,如果全部为文字的话,
        够放九个全角字符
        
  简介:任务的介绍(显示在右边窗口中),宽368,高不限
  
        文字可以自动换行
  
   2.1.1、控制码解析
   
   名称和内容均可用控制码,注意两条反斜线都要打!
   
   \\v[n] 显示n号变量
   \\c[n] 改变字体颜色。
          n=1~7 时同“显示文章”的\c[n],n=8 时为半透明色,n=9 时为系统色(青色)
   \\n 显示i号角色名字
   \\i[文件名] 显示图标
   \\p[文件名] 显示图片
   
   2.1.2、高级:内嵌表达式
        
   请参考帮助-脚本入门-字符串-内嵌表达式相关内容。
   它可以用来在任务的名称和简介那里显示变量。
   常用的表达式(注意不要漏了井号和大括号):
   #{$game_variables[n]}       ——插入n号变量的值
   #{$game_party.item_number(n)}  ——插入持有n号物品数量
                                      同理还有weapon_number,armor_number
   还可以预先定义一个变量,再插入(例子见示例任务3-灵魂线)
   
  2.2、注意事项
  
   2.2.1、括号、逗号和双引号 [ ] , " 必须使用半角符号(英文输入),
          引号内的内容则没有关系
         
   2.2.2、单引号 ' 和双引号 " 的区别:
          为了不出错误,全部用双引号吧!当然如果你对Ruby很熟悉,那就没所谓了
  
  2.3、开始设置吧!
  从107行开始设置任务资料,可以参考示例任务来设置,请仔细阅读附加讲解
  
3、接受任务

事件里的“脚本”指令输入:get_task(任务ID)
例如 get_task(1) 就是接受1号任务

  3.1、获得全部任务
  
  事件里的“脚本”指令输入:get_all_task
  这个功能基本上是用来在编写好所有任务资料后测试排版的
  

4、完成/删除任务

事件里的“脚本”指令输入:finish_task(任务ID)
例如 finish_task(1) 就是完成1号任务

注意:本脚本不负责完成任务后的奖励之类的东西,请自行在事件中判断,
       这里的完成任务指的是从任务列表中删去此任务

  4.1、删除全部任务
  
  事件里的“脚本”指令输入:finish_all_task
  作为获得全部任务的对应功能存在,似乎不会怎么用到
=end

class Scene_Task
  # 这里设置任务内容翻页音效
  CHANGE_PAGE_SE = "Audio/SE/046-Book01"
end

class Game_Party
  #--------------------------------------------------------------------------
  # ● 设置任务资料
  #--------------------------------------------------------------------------
  def get_tasks_info
    @tasks_info = []
   
    #-讲解-
    # 三个示例任务由浅入深,其实只要看懂第一个就可以使用了。
    # 任务的写法多种多样,不限于这三个任务的方法
    #----
    #-----------------------------
    # 示例任务1:沙漠中的五叶花
    #-----------------------------
    名称 = "\\c[6]沙漠中的五叶花"
    #-讲解-
    # 注意!脚本编辑器的变色功能并不是非常完善,所以换行后字变黑了,但仍然是字符
    # 串的一部分,所以不要忘记在内容最后打一个双引号
    # 按回车是强制换行
    #----
    简介 = "\\c[6]沙漠中的五叶花
\\c[9]任务目标:
获得5朵五叶花,交给西露达
\\c[0]五叶花数目:\\v[1]/5
西露达:
人家等着你的花哦~"
    #-讲解-
    # 每个任务最后一定要加上:
    # @tasks_info[任务ID] = Game_Task.new(名称, 简介)
    # 接受任务和完成任务都是用这个任务ID来索引
    #----
    @tasks_info[1] = Game_Task.new(名称, 简介)
   
    #-----------------------------
    # 示例任务2:克萝莉亚的药瓶
    #-----------------------------
    名称 = "\\c[6]克萝莉亚的药瓶"
    #-讲解-
    # 这里使用了字符串相加,例如 s = "a" + "b" ,s 就是 "ab"
    # 还用了内嵌表达式,$game_party.item_number(38) 就是38号物品的数量
    #----
    简介 = 名称 + "
   
\\c[9]任务目标:
问克萝莉亚要一个药瓶,交给西露达

\\c[0]药瓶:#{$game_party.item_number(38)}/1

西露达:
克萝莉亚就在西边的屋子里"
    @tasks_info[2] = Game_Task.new(名称, 简介)
   
    #-----------------------------
    # 示例任务3:灵魂线
    #-----------------------------
    #-讲解-
    # 这里用了条件判断,当3号变量大于等于1时,加上“完成”字样,同时变色
    #----
    if $game_variables[3] >= 1
      名称 = "\\c[8]灵魂线(完成)"
      item = "\\c[8]灵魂线:#{$game_variables[3]}/1 (完成)"
    else
      名称 = "\\c[2]灵魂线"
      item = "\\c[0]灵魂线:#{$game_variables[3]}/1"
    end
    #-讲解-
    # 预先定义变量,用内嵌表达式插入
    # 最后用了显示图标
    #----
    简介 = "#{名称}
   
\\c[9]任务目标:
找到埋起来的灵魂线,交给克萝莉亚

#{item}

\\c[0]克萝莉亚:
灵魂线就埋在其中一棵树下,给我好好找\\i[046-Skill03]"
    @tasks_info[3] = Game_Task.new(名称, 简介)
   
  end
end
   
#==============================================================================
# ■ Interpreter
#------------------------------------------------------------------------------
#  执行事件命令的解释器。本类在 Game_System 类
# 与 Game_Event 类的内部使用。
#==============================================================================

class Interpreter
  #--------------------------------------------------------------------------
  # ● 接受任务
  #--------------------------------------------------------------------------
  def get_task(id)
    task = $game_party.tasks_info[id]
    return true if (task.nil? or $game_party.current_tasks.include?(task.id))
    $game_party.current_tasks.unshift(task.id)
    return true
  end
  #--------------------------------------------------------------------------
  # ● 获得全部任务
  #--------------------------------------------------------------------------
  def get_all_task
    # 清空当前任务
    $game_party.current_tasks.clear
    for task in $game_party.tasks_info
      next if task.nil?
      $game_party.current_tasks.unshift(task.id)
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 完成/放弃任务
  #--------------------------------------------------------------------------
  def finish_task(id)
    task = $game_party.tasks_info[id]
    return true if task.nil?
    $game_party.current_tasks.delete(task.id)
    return true
  end
  #--------------------------------------------------------------------------
  # ● 删除全部任务
  #--------------------------------------------------------------------------
  def finish_all_task
    $game_party.current_tasks.clear
    return true
  end
end

#==============================================================================
# ■ Game_Party
#------------------------------------------------------------------------------
#  处理同伴的类。包含金钱以及物品的信息。本类的实例
# 请参考 $game_party。
#==============================================================================

class Game_Party
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_writer     :latest_task                  # 上次查看的任务
  #--------------------------------------------------------------------------
  # ● 取得任务资料
  #--------------------------------------------------------------------------
  def tasks_info
    if @tasks_info.nil?
      get_tasks_info
    end
    return @tasks_info
  end
  #--------------------------------------------------------------------------
  # ● 取得当前任务
  #--------------------------------------------------------------------------
  def current_tasks
    if @current_tasks.nil?
      @current_tasks = []
    end
    return @current_tasks
  end
  #--------------------------------------------------------------------------
  # ● 上次查看的任务
  #--------------------------------------------------------------------------
  def latest_task
    if !current_tasks.include?(@latest_task)
      @latest_task = current_tasks[0]
    end
    return @latest_task
  end
end

#==============================================================================
# ■ Game_Task
#------------------------------------------------------------------------------
#  处理任务的类。包含任务的信息。
#==============================================================================

class Game_Task
  attr_accessor   :name                   # 名称
  attr_accessor   :briefing               # 简介
  def initialize(name, briefing)
    @name = name
    @briefing = briefing
  end
  def height
    text = @briefing.clone
    x = 0
    y = 64
    min_y = 0
    # 限制文字处理
    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"
    text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
    # "\I" 变为 "\002"
    text.gsub!(/\\[Ii]/) { "\002" }
    # "\P" 变为 "\003"
    text.gsub!(/\\[Pp]/) { "\003" }
    # c 获取 1 个字 (如果不能取得文字就循环)
    while ((c = text.slice!(/./m)) != nil)
      # \\ 的情况下
      if c == "\000"
        # 还原为本来的文字
        c = "\\"
      end
      # \C[n] 的情况下
      if c == "\001"
        # 更改文字色
        text.sub!(/\[([0-9]+)\]/, "")
        # 下面的文字
        next
      end
      # 图标的情况下
      if c == "\002"
        icon_name = ''
        while ((cha = text.slice!(/./m)) != ']')
          next if cha == '['
          icon_name += cha
        end
        icon = RPG::Cache.icon(icon_name)
        if x + icon.width > 368
          x = 0
          y += [32, min_y].max
          min_y = 0
        end
        x += 28
        next
      end
      # 图片的情况下
      if c == "\003"
        pic_name = ''
        while ((cha = text.slice!(/./m)) != ']')
          next if cha == '['
          pic_name += cha
        end
        pic = RPG::Cache.picture(pic_name)
        if x + pic.width > 368
          x = 0
          y += [32, min_y].max
          min_y = 0
        end
        x += pic.width
        min_y = [pic.height, 32].max
        next
      end
      # 另起一行文字的情况下
      if c == "\n"
        y += [32, min_y].max
        min_y = 0
        x = 0
        # 下面的文字
        next
      end
      # 自动换行处理
      if x + 22 > 368
        y += [32, min_y].max
        min_y = 0
        x = 0
      end
      # x 为要描绘文字的加法运算
      x += 22
    end
    return (y + [32, min_y].max)
  end
  def id
    return $game_party.tasks_info.index(self)
  end
end

#==============================================================================
# ■ Window_Task_Name
#------------------------------------------------------------------------------
#  任务名称显示窗口。
#==============================================================================

class Window_Task_Name < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize(tasks)
    super(0, 0, 170, 300)
    self.z = 2999
    self.x = 50
    self.y = 100
    @tasks = []
    for id in tasks
      @tasks.push($game_party.tasks_info[id])
    end
    @item_max = tasks.size
    self.contents = Bitmap.new(
    self.width - 32, @item_max == 0 ? 32 : @item_max * 32)
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    if @tasks != []
      for task in @tasks
        draw_item(task)
      end
    else
      draw_blank
    end
  end
  #--------------------------------------------------------------------------
  # ● 描绘项目
  #--------------------------------------------------------------------------
  def draw_item(task)
    text = task.name.clone
    x = 0
    y = @tasks.index(task) * 32
    # 限制文字处理
    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"
    text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
    # "\I" 变为 "\002"
    text.gsub!(/\\[Ii]/) { "\002" }
    # "\P" 变为 "\003"
    text.gsub!(/\\[Pp]/) { "\003" }
    # c 获取 1 个字 (如果不能取得文字就循环)
    while ((c = text.slice!(/./m)) != nil)
      # \\ 的情况下
      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)
        elsif color == 8
          self.contents.font.color = disabled_color
        elsif color == 9
          self.contents.font.color = system_color
        end
        # 下面的文字
        next
      end
      # 图标的情况下
      if c == "\002"
        icon_name = ''
        while ((cha = text.slice!(/./m)) != ']')
          next if cha == '['
          icon_name += cha
        end
        icon = RPG::Cache.icon(icon_name)
        if x + icon.width > self.contents.width
          x = 0
          y += [32, min_y].max
          min_y = 0
        end
        self.contents.blt(x + 4, y + 4, icon, Rect.new(0, 0, 24, 24))
        x += 28
        next
      end
      # 图片的情况下
      if c == "\003"
        pic_name = ''
        while ((cha = text.slice!(/./m)) != ']')
          next if cha == '['
          pic_name += cha
        end
        pic = RPG::Cache.picture(pic_name)
        if x + pic.width > self.contents.width
          x = 0
          y += [32, min_y].max
          min_y = 0
        end
        self.contents.blt(x + 4, y, pic, Rect.new(0, 0, pic.width, pic.height))
        x += pic.width
        next
      end
      # 描绘文字
      self.contents.draw_text(4 + x, y, 40, 32, c)
      # x 为要描绘文字的加法运算
      x += self.contents.text_size(c).width
    end
  end
  #--------------------------------------------------------------------------
  # ● 描绘空行
  #--------------------------------------------------------------------------
  def draw_blank
    self.contents.font.color = disabled_color
    rect = Rect.new(4, 0, self.contents.width - 8, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, '当前没有任务')
  end
  #--------------------------------------------------------------------------
  # ● 获取任务
  #--------------------------------------------------------------------------
  def task
    return @tasks[self.index]
  end
end
  
#==============================================================================
# ■ Window_Task
#------------------------------------------------------------------------------
#  任务内容显示窗口。
#==============================================================================

class Window_Task < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize(task_id)
    super(240, 0, 400, 300)
    self.z = 2999
    self.y = 100
    self.x = 230
    refresh(task_id)
  end
  #--------------------------------------------------------------------------
  # ● 刷新内容
  #--------------------------------------------------------------------------
  def refresh(task_id)
    self.oy = 0
    self.visible = true
    return if task_id.nil?
    task = $game_party.tasks_info[task_id]
    if !task.nil?
      self.contents = Bitmap.new(self.width - 32, task.height)
    else
      self.contents = Bitmap.new(self.width - 32, self.height - 32)
      return
    end
    self.contents.font.color = normal_color
    # 描绘任务内容
    draw_task_info(task)
  end
  #--------------------------------------------------------------------------
  # ● 描绘任务内容
  #--------------------------------------------------------------------------
  def draw_task_info(task)
    # 记录文字x坐标
    x = 0
    # 记录文字y坐标
    y = 0
    # 记录换行时y坐标最小加值
    min_y = 0
    self.contents.font.color = normal_color
    # 描绘任务简介
    text = task.briefing.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"
    text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
    # "\I" 变为 "\002"
    text.gsub!(/\\[Ii]/) { "\002" }
    # "\P" 变为 "\003"
    text.gsub!(/\\[Pp]/) { "\003" }
    # c 获取 1 个字 (如果不能取得文字就循环)
    while ((c = text.slice!(/./m)) != nil)
      # \\ 的情况下
      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)
        elsif color == 8
          self.contents.font.color = disabled_color
        elsif color == 9
          self.contents.font.color = system_color
        end
        # 下面的文字
        next
      end
      # 图标的情况下
      if c == "\002"
        icon_name = ''
        while ((cha = text.slice!(/./m)) != ']')
          next if cha == '['
          icon_name += cha
        end
        icon = RPG::Cache.icon(icon_name)
        if x + icon.width > self.contents.width
          x = 0
          y += [32, min_y].max
          min_y = 0
        end
        self.contents.blt(x + 4, y + 4, icon, Rect.new(0, 0, 24, 24))
        x += 28
        next
      end
      # 图片的情况下
      if c == "\003"
        pic_name = ''
        while ((cha = text.slice!(/./m)) != ']')
          next if cha == '['
          pic_name += cha
        end
        pic = RPG::Cache.picture(pic_name)
        if x + pic.width > self.contents.width
          x = 0
          y += [32, min_y].max
          min_y = 0
        end
        self.contents.blt(x + 4, y, pic, Rect.new(0, 0, pic.width, pic.height))
        x += pic.width
        min_y = [pic.height, 32].max
        next
      end
      # 另起一行文字的情况下
      if c == "\n"
        y += [32, min_y].max
        min_y = 0
        x = 0
        # 下面的文字
        next
      end
      # 自动换行处理
      if x + self.contents.text_size(c).width > self.contents.width
        y += [32, min_y].max
        min_y = 0
        x = 0
      end
      # 描绘文字
      self.contents.draw_text(4 + x, y, 40, 32, c)
      # x 为要描绘文字的加法运算
      x += self.contents.text_size(c).width
    end
  end
end

#==============================================================================
# ■ Scene_Task
#------------------------------------------------------------------------------
#  处理任务画面的类。
#==============================================================================

class Scene_Task
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 刷新任务资料
    $game_party.get_tasks_info
    # 生成任务名称窗口
    @task_names_window = Window_Task_Name.new($game_party.current_tasks)
    @task_names_window.active = true
    if $game_party.current_tasks != []
      @task_names_window.index = $game_party.current_tasks.index($game_party.latest_task)
    end
    # 生成任务内容窗口
    @task_info_window = Window_Task.new($game_party.latest_task)
    @task_info_window.active = true
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面被切换的话就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @task_names_window.dispose
    @task_info_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 刷新窗口
    @task_names_window.update
    @task_info_window.update
    update_task_names_window
  end
  #--------------------------------------------------------------------------
  # ● 刷新任务名称窗口
  #--------------------------------------------------------------------------
  def update_task_names_window
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 这里设置返回的场景,返回地图是Scene_Map.new,菜单是Scene_Menu.new(任务界面index)
   
      
      #********************************************
      #按退出键切换为菜单画面
      $scene = Scene_Map.new
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 无任务可显示的话
      if @task_names_window.task == nil
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 如果光标没有移动的话,翻页
      if $game_party.latest_task == @task_names_window.task.id
        if @task_info_window.oy + @task_info_window.height - 32 > @task_info_window.contents.height
          @task_info_window.oy = 0
        else
          @task_info_window.oy += 480-32
        end
        if @task_info_window.contents.height > @task_info_window.height - 32
          # 演奏翻页 SE
          Audio.se_play(CHANGE_PAGE_SE)
        end
      else
        @task_info_window.refresh(@task_names_window.task.id)
        $game_party.latest_task = @task_names_window.task.id
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
      end
    end
  end
end
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
12 小时
注册时间
2013-2-2
帖子
7
9
 楼主| 发表于 2013-2-8 21:12:10 | 只看该作者
  1. =begin
  2. --------------------------------------------------------------------------
  3. 详尽任务显示界面 v2.1
  4. --------------------------------------------------------------------------
  5. By 叶子

  6. 日期与更新
  7. 3-29-2006 -v1.0
  8. 4-3-2006  -v2.0
  9. -可以改变文字颜色,显示变量,显示图标,显示图片
  10. -大幅简化了编写任务内容的过程,加入自动换行功能
  11. -精简了窗口,使其还可以用作图鉴系统、日记系统等等
  12. 4-6-2006  -v2.1
  13. -增加了获得全部任务与删除全部任务命令
  14. -改正通假字,修改了示例任务3
  15. --------------------------------------------------------------------------
  16. 顾名思义,就是显示任务资料的界面
  17. 任务资料要预先在这里设定好
  18. 下载范例工程,能帮助你更快更好地掌握使用方法
  19. --------------------------------------------------------------------------
  20. 使用方法:

  21. 1、召唤任务显示界面:$scene = Scene_Task.new

  22. 可以在事件中的“脚本”指令加入这段东西,又或者修改 Scene_Menu 来增加一个显示
  23. 任务的选项。如果是修改 Scene_Menu 增加选项的话,在脚本倒数第30行左右,
  24. 把 $scene = Scene_Map.new 修改成 $scene = Scene_Menu.new(任务界面index)

  25. 2、设置任务资料

  26.   2.1、相关内容解析
  27.   
  28.   所有内容文字必须用双引号括住
  29.   
  30.   名称:任务的名字(显示在左边窗口中),大小为208×32,如果全部为文字的话,
  31.         够放九个全角字符
  32.         
  33.   简介:任务的介绍(显示在右边窗口中),宽368,高不限
  34.   
  35.         文字可以自动换行
  36.   
  37.    2.1.1、控制码解析
  38.    
  39.    名称和内容均可用控制码,注意两条反斜线都要打!
  40.    
  41.    \\v[n] 显示n号变量
  42.    \\c[n] 改变字体颜色。
  43.           n=1~7 时同“显示文章”的\c[n],n=8 时为半透明色,n=9 时为系统色(青色)
  44.    \\n[i] 显示i号角色名字
  45.    \\i[文件名] 显示图标
  46.    \\p[文件名] 显示图片
  47.    
  48.    2.1.2、高级:内嵌表达式
  49.         
  50.    请参考帮助-脚本入门-字符串-内嵌表达式相关内容。
  51.    它可以用来在任务的名称和简介那里显示变量。
  52.    常用的表达式(注意不要漏了井号和大括号):
  53.    #{$game_variables[n]}       ——插入n号变量的值
  54.    #{$game_party.item_number(n)}  ——插入持有n号物品数量
  55.                                       同理还有weapon_number,armor_number
  56.    还可以预先定义一个变量,再插入(例子见示例任务3-灵魂线)
  57.    
  58.   2.2、注意事项
  59.   
  60.    2.2.1、括号、逗号和双引号 [ ] , " 必须使用半角符号(英文输入),
  61.           引号内的内容则没有关系
  62.          
  63.    2.2.2、单引号 ' 和双引号 " 的区别:
  64.           为了不出错误,全部用双引号吧!当然如果你对Ruby很熟悉,那就没所谓了
  65.   
  66.   2.3、开始设置吧!
  67.   从107行开始设置任务资料,可以参考示例任务来设置,请仔细阅读附加讲解
  68.   
  69. 3、接受任务

  70. 事件里的“脚本”指令输入:get_task(任务ID)
  71. 例如 get_task(1) 就是接受1号任务

  72.   3.1、获得全部任务
  73.   
  74.   事件里的“脚本”指令输入:get_all_task
  75.   这个功能基本上是用来在编写好所有任务资料后测试排版的
  76.   

  77. 4、完成/删除任务

  78. 事件里的“脚本”指令输入:finish_task(任务ID)
  79. 例如 finish_task(1) 就是完成1号任务

  80. 注意:本脚本不负责完成任务后的奖励之类的东西,请自行在事件中判断,
  81.        这里的完成任务指的是从任务列表中删去此任务

  82.   4.1、删除全部任务
  83.   
  84.   事件里的“脚本”指令输入:finish_all_task
  85.   作为获得全部任务的对应功能存在,似乎不会怎么用到
  86. =end

  87. class Scene_Task
  88.   # 这里设置任务内容翻页音效
  89.   CHANGE_PAGE_SE = "Audio/SE/046-Book01"
  90. end

  91. class Game_Party
  92.   #--------------------------------------------------------------------------
  93.   # ● 设置任务资料
  94.   #--------------------------------------------------------------------------
  95.   def get_tasks_info
  96.     @tasks_info = []
  97.    
  98.     #-讲解-
  99.     # 三个示例任务由浅入深,其实只要看懂第一个就可以使用了。
  100.     # 任务的写法多种多样,不限于这三个任务的方法
  101.     #----
  102.     #-----------------------------
  103.     # 示例任务1:沙漠中的五叶花
  104.     #-----------------------------
  105.     名称 = "\\c[6]沙漠中的五叶花"
  106.     #-讲解-
  107.     # 注意!脚本编辑器的变色功能并不是非常完善,所以换行后字变黑了,但仍然是字符
  108.     # 串的一部分,所以不要忘记在内容最后打一个双引号
  109.     # 按回车是强制换行
  110.     #----
  111.     简介 = "\\c[6]沙漠中的五叶花
  112. \\c[9]任务目标:
  113. 获得5朵五叶花,交给西露达
  114. \\c[0]五叶花数目:\\v[1]/5
  115. 西露达:
  116. 人家等着你的花哦~"
  117.     #-讲解-
  118.     # 每个任务最后一定要加上:
  119.     # @tasks_info[任务ID] = Game_Task.new(名称, 简介)
  120.     # 接受任务和完成任务都是用这个任务ID来索引
  121.     #----
  122.     @tasks_info[1] = Game_Task.new(名称, 简介)
  123.    
  124.     #-----------------------------
  125.     # 示例任务2:克萝莉亚的药瓶
  126.     #-----------------------------
  127.     名称 = "\\c[6]克萝莉亚的药瓶"
  128.     #-讲解-
  129.     # 这里使用了字符串相加,例如 s = "a" + "b" ,s 就是 "ab"
  130.     # 还用了内嵌表达式,$game_party.item_number(38) 就是38号物品的数量
  131.     #----
  132.     简介 = 名称 + "
  133.    
  134. \\c[9]任务目标:
  135. 问克萝莉亚要一个药瓶,交给西露达

  136. \\c[0]药瓶:#{$game_party.item_number(38)}/1

  137. 西露达:
  138. 克萝莉亚就在西边的屋子里"
  139.     @tasks_info[2] = Game_Task.new(名称, 简介)
  140.    
  141.     #-----------------------------
  142.     # 示例任务3:灵魂线
  143.     #-----------------------------
  144.     #-讲解-
  145.     # 这里用了条件判断,当3号变量大于等于1时,加上“完成”字样,同时变色
  146.     #----
  147.     if $game_variables[3] >= 1
  148.       名称 = "\\c[8]灵魂线(完成)"
  149.       item = "\\c[8]灵魂线:#{$game_variables[3]}/1 (完成)"
  150.     else
  151.       名称 = "\\c[2]灵魂线"
  152.       item = "\\c[0]灵魂线:#{$game_variables[3]}/1"
  153.     end
  154.     #-讲解-
  155.     # 预先定义变量,用内嵌表达式插入
  156.     # 最后用了显示图标
  157.     #----
  158.     简介 = "#{名称}
  159.    
  160. \\c[9]任务目标:
  161. 找到埋起来的灵魂线,交给克萝莉亚

  162. #{item}

  163. \\c[0]克萝莉亚:
  164. 灵魂线就埋在其中一棵树下,给我好好找\\i[046-Skill03]"
  165.     @tasks_info[3] = Game_Task.new(名称, 简介)
  166.    
  167.   end
  168. end
  169.    
  170. #==============================================================================
  171. # ■ Interpreter
  172. #------------------------------------------------------------------------------
  173. #  执行事件命令的解释器。本类在 Game_System 类
  174. # 与 Game_Event 类的内部使用。
  175. #==============================================================================

  176. class Interpreter
  177.   #--------------------------------------------------------------------------
  178.   # ● 接受任务
  179.   #--------------------------------------------------------------------------
  180.   def get_task(id)
  181.     task = $game_party.tasks_info[id]
  182.     return true if (task.nil? or $game_party.current_tasks.include?(task.id))
  183.     $game_party.current_tasks.unshift(task.id)
  184.     return true
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● 获得全部任务
  188.   #--------------------------------------------------------------------------
  189.   def get_all_task
  190.     # 清空当前任务
  191.     $game_party.current_tasks.clear
  192.     for task in $game_party.tasks_info
  193.       next if task.nil?
  194.       $game_party.current_tasks.unshift(task.id)
  195.     end
  196.     return true
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● 完成/放弃任务
  200.   #--------------------------------------------------------------------------
  201.   def finish_task(id)
  202.     task = $game_party.tasks_info[id]
  203.     return true if task.nil?
  204.     $game_party.current_tasks.delete(task.id)
  205.     return true
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ● 删除全部任务
  209.   #--------------------------------------------------------------------------
  210.   def finish_all_task
  211.     $game_party.current_tasks.clear
  212.     return true
  213.   end
  214. end

  215. #==============================================================================
  216. # ■ Game_Party
  217. #------------------------------------------------------------------------------
  218. #  处理同伴的类。包含金钱以及物品的信息。本类的实例
  219. # 请参考 $game_party。
  220. #==============================================================================

  221. class Game_Party
  222.   #--------------------------------------------------------------------------
  223.   # ● 定义实例变量
  224.   #--------------------------------------------------------------------------
  225.   attr_writer     :latest_task                  # 上次查看的任务
  226.   #--------------------------------------------------------------------------
  227.   # ● 取得任务资料
  228.   #--------------------------------------------------------------------------
  229.   def tasks_info
  230.     if @tasks_info.nil?
  231.       get_tasks_info
  232.     end
  233.     return @tasks_info
  234.   end
  235.   #--------------------------------------------------------------------------
  236.   # ● 取得当前任务
  237.   #--------------------------------------------------------------------------
  238.   def current_tasks
  239.     if @current_tasks.nil?
  240.       @current_tasks = []
  241.     end
  242.     return @current_tasks
  243.   end
  244.   #--------------------------------------------------------------------------
  245.   # ● 上次查看的任务
  246.   #--------------------------------------------------------------------------
  247.   def latest_task
  248.     if !current_tasks.include?(@latest_task)
  249.       @latest_task = current_tasks[0]
  250.     end
  251.     return @latest_task
  252.   end
  253. end

  254. #==============================================================================
  255. # ■ Game_Task
  256. #------------------------------------------------------------------------------
  257. #  处理任务的类。包含任务的信息。
  258. #==============================================================================

  259. class Game_Task
  260.   attr_accessor   :name                   # 名称
  261.   attr_accessor   :briefing               # 简介
  262.   def initialize(name, briefing)
  263.     @name = name
  264.     @briefing = briefing
  265.   end
  266.   def height
  267.     text = @briefing.clone
  268.     x = 0
  269.     y = 64
  270.     min_y = 0
  271.     # 限制文字处理
  272.     begin
  273.       last_text = text.clone
  274.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  275.     end until text == last_text
  276.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  277.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  278.     end
  279.     # 为了方便、将 "\\\\" 变换为 "\000"
  280.     text.gsub!(/\\\\/) { "\000" }
  281.     # "\C" 变为 "\001"
  282.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  283.     # "\I" 变为 "\002"
  284.     text.gsub!(/\\[Ii]/) { "\002" }
  285.     # "\P" 变为 "\003"
  286.     text.gsub!(/\\[Pp]/) { "\003" }
  287.     # c 获取 1 个字 (如果不能取得文字就循环)
  288.     while ((c = text.slice!(/./m)) != nil)
  289.       # \\ 的情况下
  290.       if c == "\000"
  291.         # 还原为本来的文字
  292.         c = "\\"
  293.       end
  294.       # \C[n] 的情况下
  295.       if c == "\001"
  296.         # 更改文字色
  297.         text.sub!(/\[([0-9]+)\]/, "")
  298.         # 下面的文字
  299.         next
  300.       end
  301.       # 图标的情况下
  302.       if c == "\002"
  303.         icon_name = ''
  304.         while ((cha = text.slice!(/./m)) != ']')
  305.           next if cha == '['
  306.           icon_name += cha
  307.         end
  308.         icon = RPG::Cache.icon(icon_name)
  309.         if x + icon.width > 368
  310.           x = 0
  311.           y += [32, min_y].max
  312.           min_y = 0
  313.         end
  314.         x += 28
  315.         next
  316.       end
  317.       # 图片的情况下
  318.       if c == "\003"
  319.         pic_name = ''
  320.         while ((cha = text.slice!(/./m)) != ']')
  321.           next if cha == '['
  322.           pic_name += cha
  323.         end
  324.         pic = RPG::Cache.picture(pic_name)
  325.         if x + pic.width > 368
  326.           x = 0
  327.           y += [32, min_y].max
  328.           min_y = 0
  329.         end
  330.         x += pic.width
  331.         min_y = [pic.height, 32].max
  332.         next
  333.       end
  334.       # 另起一行文字的情况下
  335.       if c == "\n"
  336.         y += [32, min_y].max
  337.         min_y = 0
  338.         x = 0
  339.         # 下面的文字
  340.         next
  341.       end
  342.       # 自动换行处理
  343.       if x + 22 > 368
  344.         y += [32, min_y].max
  345.         min_y = 0
  346.         x = 0
  347.       end
  348.       # x 为要描绘文字的加法运算
  349.       x += 22
  350.     end
  351.     return (y + [32, min_y].max)
  352.   end
  353.   def id
  354.     return $game_party.tasks_info.index(self)
  355.   end
  356. end

  357. #==============================================================================
  358. # ■ Window_Task_Name
  359. #------------------------------------------------------------------------------
  360. #  任务名称显示窗口。
  361. #==============================================================================

  362. class Window_Task_Name < Window_Selectable
  363.   #--------------------------------------------------------------------------
  364.   # ● 初始化对像
  365.   #--------------------------------------------------------------------------
  366.   def initialize(tasks)
  367.     super(0, 0, 170, 300)
  368.     self.z = 2999
  369.     self.x = 50
  370.     self.y = 100
  371.     @tasks = []
  372.     for id in tasks
  373.       @tasks.push($game_party.tasks_info[id])
  374.     end
  375.     @item_max = tasks.size
  376.     self.contents = Bitmap.new(
  377.     self.width - 32, @item_max == 0 ? 32 : @item_max * 32)
  378.     refresh
  379.     self.index = 0
  380.   end
  381.   #--------------------------------------------------------------------------
  382.   # ● 刷新
  383.   #--------------------------------------------------------------------------
  384.   def refresh
  385.     self.contents.clear
  386.     if @tasks != []
  387.       for task in @tasks
  388.         draw_item(task)
  389.       end
  390.     else
  391.       draw_blank
  392.     end
  393.   end
  394.   #--------------------------------------------------------------------------
  395.   # ● 描绘项目
  396.   #--------------------------------------------------------------------------
  397.   def draw_item(task)
  398.     text = task.name.clone
  399.     x = 0
  400.     y = @tasks.index(task) * 32
  401.     # 限制文字处理
  402.     begin
  403.       last_text = text.clone
  404.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  405.     end until text == last_text
  406.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  407.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  408.     end
  409.     # 为了方便、将 "\\\\" 变换为 "\000"
  410.     text.gsub!(/\\\\/) { "\000" }
  411.     # "\\C" 变为 "\001"
  412.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  413.     # "\I" 变为 "\002"
  414.     text.gsub!(/\\[Ii]/) { "\002" }
  415.     # "\P" 变为 "\003"
  416.     text.gsub!(/\\[Pp]/) { "\003" }
  417.     # c 获取 1 个字 (如果不能取得文字就循环)
  418.     while ((c = text.slice!(/./m)) != nil)
  419.       # \\ 的情况下
  420.       if c == "\000"
  421.         # 还原为本来的文字
  422.         c = "\\"
  423.       end
  424.       # \C[n] 的情况下
  425.       if c == "\001"
  426.         # 更改文字色
  427.         text.sub!(/\[([0-9]+)\]/, "")
  428.         color = $1.to_i
  429.         if color >= 0 and color <= 7
  430.           self.contents.font.color = text_color(color)
  431.         elsif color == 8
  432.           self.contents.font.color = disabled_color
  433.         elsif color == 9
  434.           self.contents.font.color = system_color
  435.         end
  436.         # 下面的文字
  437.         next
  438.       end
  439.       # 图标的情况下
  440.       if c == "\002"
  441.         icon_name = ''
  442.         while ((cha = text.slice!(/./m)) != ']')
  443.           next if cha == '['
  444.           icon_name += cha
  445.         end
  446.         icon = RPG::Cache.icon(icon_name)
  447.         if x + icon.width > self.contents.width
  448.           x = 0
  449.           y += [32, min_y].max
  450.           min_y = 0
  451.         end
  452.         self.contents.blt(x + 4, y + 4, icon, Rect.new(0, 0, 24, 24))
  453.         x += 28
  454.         next
  455.       end
  456.       # 图片的情况下
  457.       if c == "\003"
  458.         pic_name = ''
  459.         while ((cha = text.slice!(/./m)) != ']')
  460.           next if cha == '['
  461.           pic_name += cha
  462.         end
  463.         pic = RPG::Cache.picture(pic_name)
  464.         if x + pic.width > self.contents.width
  465.           x = 0
  466.           y += [32, min_y].max
  467.           min_y = 0
  468.         end
  469.         self.contents.blt(x + 4, y, pic, Rect.new(0, 0, pic.width, pic.height))
  470.         x += pic.width
  471.         next
  472.       end
  473.       # 描绘文字
  474.       self.contents.draw_text(4 + x, y, 40, 32, c)
  475.       # x 为要描绘文字的加法运算
  476.       x += self.contents.text_size(c).width
  477.     end
  478.   end
  479.   #--------------------------------------------------------------------------
  480.   # ● 描绘空行
  481.   #--------------------------------------------------------------------------
  482.   def draw_blank
  483.     self.contents.font.color = disabled_color
  484.     rect = Rect.new(4, 0, self.contents.width - 8, 32)
  485.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  486.     self.contents.draw_text(rect, '当前没有任务')
  487.   end
  488.   #--------------------------------------------------------------------------
  489.   # ● 获取任务
  490.   #--------------------------------------------------------------------------
  491.   def task
  492.     return @tasks[self.index]
  493.   end
  494. end
  495.   
  496. #==============================================================================
  497. # ■ Window_Task
  498. #------------------------------------------------------------------------------
  499. #  任务内容显示窗口。
  500. #==============================================================================

  501. class Window_Task < Window_Base
  502.   #--------------------------------------------------------------------------
  503.   # ● 初始化对像
  504.   #--------------------------------------------------------------------------
  505.   def initialize(task_id)
  506.     super(240, 0, 400, 300)
  507.     self.z = 2999
  508.     self.y = 100
  509.     self.x = 230
  510.     refresh(task_id)
  511.   end
  512.   #--------------------------------------------------------------------------
  513.   # ● 刷新内容
  514.   #--------------------------------------------------------------------------
  515.   def refresh(task_id)
  516.     self.oy = 0
  517.     self.visible = true
  518.     return if task_id.nil?
  519.     task = $game_party.tasks_info[task_id]
  520.     if !task.nil?
  521.       self.contents = Bitmap.new(self.width - 32, task.height)
  522.     else
  523.       self.contents = Bitmap.new(self.width - 32, self.height - 32)
  524.       return
  525.     end
  526.     self.contents.font.color = normal_color
  527.     # 描绘任务内容
  528.     draw_task_info(task)
  529.   end
  530.   #--------------------------------------------------------------------------
  531.   # ● 描绘任务内容
  532.   #--------------------------------------------------------------------------
  533.   def draw_task_info(task)
  534.     # 记录文字x坐标
  535.     x = 0
  536.     # 记录文字y坐标
  537.     y = 0
  538.     # 记录换行时y坐标最小加值
  539.     min_y = 0
  540.     self.contents.font.color = normal_color
  541.     # 描绘任务简介
  542.     text = task.briefing.clone
  543.     # 限制文字处理
  544.     begin
  545.       last_text = text.clone
  546.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  547.     end until text == last_text
  548.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  549.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  550.     end
  551.     # 为了方便、将 "\\\\" 变换为 "\000"
  552.     text.gsub!(/\\\\/) { "\000" }
  553.     # "\C" 变为 "\001"
  554.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  555.     # "\I" 变为 "\002"
  556.     text.gsub!(/\\[Ii]/) { "\002" }
  557.     # "\P" 变为 "\003"
  558.     text.gsub!(/\\[Pp]/) { "\003" }
  559.     # c 获取 1 个字 (如果不能取得文字就循环)
  560.     while ((c = text.slice!(/./m)) != nil)
  561.       # \\ 的情况下
  562.       if c == "\000"
  563.         # 还原为本来的文字
  564.         c = "\\"
  565.       end
  566.       # \C[n] 的情况下
  567.       if c == "\001"
  568.         # 更改文字色
  569.         text.sub!(/\[([0-9]+)\]/, "")
  570.         color = $1.to_i
  571.         if color >= 0 and color <= 7
  572.           self.contents.font.color = text_color(color)
  573.         elsif color == 8
  574.           self.contents.font.color = disabled_color
  575.         elsif color == 9
  576.           self.contents.font.color = system_color
  577.         end
  578.         # 下面的文字
  579.         next
  580.       end
  581.       # 图标的情况下
  582.       if c == "\002"
  583.         icon_name = ''
  584.         while ((cha = text.slice!(/./m)) != ']')
  585.           next if cha == '['
  586.           icon_name += cha
  587.         end
  588.         icon = RPG::Cache.icon(icon_name)
  589.         if x + icon.width > self.contents.width
  590.           x = 0
  591.           y += [32, min_y].max
  592.           min_y = 0
  593.         end
  594.         self.contents.blt(x + 4, y + 4, icon, Rect.new(0, 0, 24, 24))
  595.         x += 28
  596.         next
  597.       end
  598.       # 图片的情况下
  599.       if c == "\003"
  600.         pic_name = ''
  601.         while ((cha = text.slice!(/./m)) != ']')
  602.           next if cha == '['
  603.           pic_name += cha
  604.         end
  605.         pic = RPG::Cache.picture(pic_name)
  606.         if x + pic.width > self.contents.width
  607.           x = 0
  608.           y += [32, min_y].max
  609.           min_y = 0
  610.         end
  611.         self.contents.blt(x + 4, y, pic, Rect.new(0, 0, pic.width, pic.height))
  612.         x += pic.width
  613.         min_y = [pic.height, 32].max
  614.         next
  615.       end
  616.       # 另起一行文字的情况下
  617.       if c == "\n"
  618.         y += [32, min_y].max
  619.         min_y = 0
  620.         x = 0
  621.         # 下面的文字
  622.         next
  623.       end
  624.       # 自动换行处理
  625.       if x + self.contents.text_size(c).width > self.contents.width
  626.         y += [32, min_y].max
  627.         min_y = 0
  628.         x = 0
  629.       end
  630.       # 描绘文字
  631.       self.contents.draw_text(4 + x, y, 40, 32, c)
  632.       # x 为要描绘文字的加法运算
  633.       x += self.contents.text_size(c).width
  634.     end
  635.   end
  636. end

  637. #==============================================================================
  638. # ■ Scene_Task
  639. #------------------------------------------------------------------------------
  640. #  处理任务画面的类。
  641. #==============================================================================

  642. class Scene_Task
  643.   #--------------------------------------------------------------------------
  644.   # ● 主处理
  645.   #--------------------------------------------------------------------------
  646.   def main
  647.     # 刷新任务资料
  648.     $game_party.get_tasks_info
  649.     # 生成任务名称窗口
  650.     @task_names_window = Window_Task_Name.new($game_party.current_tasks)
  651.     @task_names_window.active = true
  652.     if $game_party.current_tasks != []
  653.       @task_names_window.index = $game_party.current_tasks.index($game_party.latest_task)
  654.     end
  655.     # 生成任务内容窗口
  656.     @task_info_window = Window_Task.new($game_party.latest_task)
  657.     @task_info_window.active = true
  658.     # 执行过渡
  659.     Graphics.transition
  660.     # 主循环
  661.     loop do
  662.       # 刷新游戏画面
  663.       Graphics.update
  664.       # 刷新输入信息
  665.       Input.update
  666.       # 刷新画面
  667.       update
  668.       # 如果画面被切换的话就中断循环
  669.       if $scene != self
  670.         break
  671.       end
  672.     end
  673.     # 准备过渡
  674.     Graphics.freeze
  675.     # 释放窗口
  676.     @task_names_window.dispose
  677.     @task_info_window.dispose
  678.   end
  679.   #--------------------------------------------------------------------------
  680.   # ● 刷新画面
  681.   #--------------------------------------------------------------------------
  682.   def update
  683.     # 刷新窗口
  684.     @task_names_window.update
  685.     @task_info_window.update
  686.     update_task_names_window
  687.   end
  688.   #--------------------------------------------------------------------------
  689.   # ● 刷新任务名称窗口
  690.   #--------------------------------------------------------------------------
  691.   def update_task_names_window
  692.     # 按下 B 键的情况下
  693.     if Input.trigger?(Input::B)
  694.       # 演奏取消 SE
  695.       $game_system.se_play($data_system.cancel_se)
  696.       # 这里设置返回的场景,返回地图是Scene_Map.new,菜单是Scene_Menu.new(任务界面index)
  697.    
  698.       
  699.       #********************************************
  700.       #按退出键切换为菜单画面
  701.       $scene = Scene_Map.new
  702.       return
  703.     end
  704.     # 按下 C 键的情况下
  705.     if Input.trigger?(Input::C)
  706.       # 无任务可显示的话
  707.       if @task_names_window.task == nil
  708.         # 演奏冻结 SE
  709.         $game_system.se_play($data_system.buzzer_se)
  710.         return
  711.       end
  712.       # 如果光标没有移动的话,翻页
  713.       if $game_party.latest_task == @task_names_window.task.id
  714.         if @task_info_window.oy + @task_info_window.height - 32 > @task_info_window.contents.height
  715.           @task_info_window.oy = 0
  716.         else
  717.           @task_info_window.oy += 480-32
  718.         end
  719.         if @task_info_window.contents.height > @task_info_window.height - 32
  720.           # 演奏翻页 SE
  721.           Audio.se_play(CHANGE_PAGE_SE)
  722.         end
  723.       else
  724.         @task_info_window.refresh(@task_names_window.task.id)
  725.         $game_party.latest_task = @task_names_window.task.id
  726.         # 演奏确定 SE
  727.         $game_system.se_play($data_system.decision_se)
  728.       end
  729.     end
  730.   end
  731. end
复制代码

点评

恩,我现在去做  发表于 2013-2-8 21:21
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

10
发表于 2013-2-8 21:30:53 | 只看该作者
本帖最后由 美丽晨露 于 2013-2-8 21:36 编辑
lzhyt88 发表于 2013-2-8 21:12


具体看看吧,这样好了
之前的做错了
任务范例.7z (188.73 KB, 下载次数: 27)
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-29 19:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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