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

Project1

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

[已经解决] 求 叶子 的《详尽任务显示界面》范例工程或者其他任务系统

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
17 小时
注册时间
2011-9-28
帖子
13
跳转到指定楼层
1
发表于 2014-6-1 22:24:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
想找一个比较好的任务系统,无意间在其他范例工程中看到了叶子前辈的《详尽任务显示界面 v2.1》。
虽然大致研读了下脚本,但是在新建任务的时候出现问题。
在事件中的脚本里写入语句,总是报错:No Method Error。
可是脚本里定义了方法啊。
看叶子前辈的原贴,内容都关闭了。
因此想求一个范例工程,以便研究。
如果各位还有其他比较好的任务系统请拜托发个链接,搜索出的好多都是VA和VX的脚本……
谢谢大家了。

Lv3.寻梦者

○赛

梦石
0
星屑
1249
在线时间
1276 小时
注册时间
2013-1-22
帖子
2246

贵宾

2
发表于 2014-6-2 08:01:19 | 只看该作者
你可以去天干宝典和百变宝典里找找看。

或者把你的事件脚本和报错界面发过来。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

路人党员

梦石
0
星屑
52
在线时间
2276 小时
注册时间
2010-12-30
帖子
3225
3
发表于 2014-6-2 10:54:42 | 只看该作者
便民任务界面

评分

参与人数 1星屑 +66 收起 理由
hys111111 + 66 感谢回答

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
17 小时
注册时间
2011-9-28
帖子
13
4
 楼主| 发表于 2014-6-2 19:09:46 | 只看该作者
英顺的马甲 发表于 2014-6-2 10:54
便民任务界面

感谢!这个任务界面很好用!谢谢
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
帖子
1698

开拓者

5
发表于 2014-6-2 21:05:55 | 只看该作者
叶子的任务界面脚本【囧魂】里有。
爪机只能帮到这了

评分

参与人数 1星屑 +66 收起 理由
hys111111 + 66 感谢回答

查看全部评分


  -fk: -azogi:
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
17 小时
注册时间
2011-9-28
帖子
13
6
 楼主| 发表于 2014-6-3 09:53:10 | 只看该作者
kuerlulu 发表于 2014-6-2 21:05
叶子的任务界面脚本【囧魂】里有。
爪机只能帮到这了

好的,谢谢!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

双子人

梦石
0
星屑
3185
在线时间
3618 小时
注册时间
2009-4-4
帖子
4154

开拓者

7
发表于 2014-6-3 19:24:23 | 只看该作者
本帖最后由 hys111111 于 2014-6-3 19:28 编辑

TaskInfo.rar (214.75 KB, 下载次数: 205)
这是叶子的任务系统。
RUBY 代码复制
  1. =begin
  2.  --------------------------------------------------------------------------
  3.  详尽任务显示界面 v2.1
  4.  --------------------------------------------------------------------------
  5.  By 叶子
  6.  
  7.  日期与更新
  8.  3-29-2006 -v1.0
  9.  4-3-2006  -v2.0
  10.  -可以改变文字颜色,显示变量,显示图标,显示图片
  11.  -大幅简化了编写任务内容的过程,加入自动换行功能
  12.  -精简了窗口,使其还可以用作图鉴系统、日记系统等等
  13.  4-6-2006  -v2.1
  14.  -增加了获得全部任务与删除全部任务命令
  15.  -改正通假字,修改了示例任务3
  16.  --------------------------------------------------------------------------
  17.  顾名思义,就是显示任务资料的界面
  18.  任务资料要预先在这里设定好
  19.  下载范例工程,能帮助你更快更好地掌握使用方法
  20.  --------------------------------------------------------------------------
  21.  使用方法:
  22.  
  23.  1、召唤任务显示界面:$scene = Scene_Task.new
  24.  
  25.  可以在事件中的“脚本”指令加入这段东西,又或者修改 Scene_Menu 来增加一个显示
  26.  任务的选项。如果是修改 Scene_Menu 增加选项的话,在脚本倒数第30行左右,
  27.  把 $scene = Scene_Map.new 修改成 $scene = Scene_Menu.new(任务界面index)
  28.  
  29.  2、设置任务资料
  30.  
  31.   2.1、相关内容解析
  32.  
  33.   所有内容文字必须用双引号括住
  34.  
  35.   名称:任务的名字(显示在左边窗口中),大小为208×32,如果全部为文字的话,
  36.         够放九个全角字符
  37.        
  38.   简介:任务的介绍(显示在右边窗口中),宽368,高不限
  39.  
  40.         文字可以自动换行
  41.  
  42.    2.1.1、控制码解析
  43.    
  44.    名称和内容均可用控制码,注意两条反斜线都要打!
  45.    
  46.    \\v[n] 显示n号变量
  47.    \\c[n] 改变字体颜色。
  48.           n=1~7 时同“显示文章”的\c[n],n=8 时为半透明色,n=9 时为系统色(青色)
  49.    \\n[i] 显示i号角色名字
  50.    \\i[文件名] 显示图标
  51.    \\p[文件名] 显示图片
  52.    
  53.    2.1.2、高级:内嵌表达式
  54.        
  55.    请参考帮助-脚本入门-字符串-内嵌表达式相关内容。
  56.    它可以用来在任务的名称和简介那里显示变量。
  57.    常用的表达式(注意不要漏了井号和大括号):
  58.    #{$game_variables[n]}       ——插入n号变量的值
  59.    #{$game_party.item_number(n)}  ——插入持有n号物品数量
  60.                                       同理还有weapon_number,armor_number
  61.    还可以预先定义一个变量,再插入(例子见示例任务3-灵魂线)
  62.    
  63.   2.2、注意事项
  64.  
  65.    2.2.1、括号、逗号和双引号 [ ] , " 必须使用半角符号(英文输入),
  66.           引号内的内容则没有关系
  67.           
  68.    2.2.2、单引号 ' 和双引号 " 的区别:
  69.           为了不出错误,全部用双引号吧!当然如果你对Ruby很熟悉,那就没所谓了
  70.  
  71.   2.3、开始设置吧!
  72.   从107行开始设置任务资料,可以参考示例任务来设置,请仔细阅读附加讲解
  73.  
  74.  3、接受任务
  75.  
  76.  事件里的“脚本”指令输入:get_task(任务ID)
  77.  例如 get_task(1) 就是接受1号任务
  78.  
  79.   3.1、获得全部任务
  80.  
  81.   事件里的“脚本”指令输入:get_all_task
  82.   这个功能基本上是用来在编写好所有任务资料后测试排版的
  83.  
  84.  
  85.  4、完成/删除任务
  86.  
  87.  事件里的“脚本”指令输入:finish_task(任务ID)
  88.  例如 finish_task(1) 就是完成1号任务
  89.  
  90.  注意:本脚本不负责完成任务后的奖励之类的东西,请自行在事件中判断,
  91.        这里的完成任务指的是从任务列表中删去此任务
  92.  
  93.   4.1、删除全部任务
  94.  
  95.   事件里的“脚本”指令输入:finish_all_task
  96.   作为获得全部任务的对应功能存在,似乎不会怎么用到
  97. =end
  98.  
  99. class Scene_Task
  100.   # 这里设置任务内容翻页音效
  101.   CHANGE_PAGE_SE = "Audio/SE/046-Book01"
  102. end
  103.  
  104. class Game_Party
  105.   #--------------------------------------------------------------------------
  106.   # ● 设置任务资料
  107.   #--------------------------------------------------------------------------
  108.   def get_tasks_info
  109.     @tasks_info = []
  110.  
  111.     #-讲解-
  112.     # 三个示例任务由浅入深,其实只要看懂第一个就可以使用了。
  113.     # 任务的写法多种多样,不限于这三个任务的方法
  114.     #----
  115.     #-----------------------------
  116.     # 示例任务1:沙漠中的五叶花
  117.     #-----------------------------
  118.     名称 = "\\c[6]沙漠中的五叶花"
  119.     #-讲解-
  120.     # 注意!脚本编辑器的变色功能并不是非常完善,所以换行后字变黑了,但仍然是字符
  121.     # 串的一部分,所以不要忘记在内容最后打一个双引号
  122.     # 按回车是强制换行
  123.     #----
  124.     简介 = "\\c[6]沙漠中的五叶花
  125.  
  126. \\c[9]任务目标:
  127. 获得5朵五叶花,交给西露达
  128.  
  129. \\c[0]五叶花数目:\\v[1]/5
  130.  
  131. 西露达:
  132. 人家等着你的花哦~"
  133.     #-讲解-
  134.     # 每个任务最后一定要加上:
  135.     # @tasks_info[任务ID] = Game_Task.new(名称, 简介)
  136.     # 接受任务和完成任务都是用这个任务ID来索引
  137.     #----
  138.     @tasks_info[1] = Game_Task.new(名称, 简介)
  139.  
  140.     #-----------------------------
  141.     # 示例任务2:克萝莉亚的药瓶
  142.     #-----------------------------
  143.     名称 = "\\c[6]克萝莉亚的药瓶"
  144.     #-讲解-
  145.     # 这里使用了字符串相加,例如 s = "a" + "b" ,s 就是 "ab"
  146.     # 还用了内嵌表达式,$game_party.item_number(38) 就是38号物品的数量
  147.     #----
  148.     简介 = 名称 + "
  149.  
  150. \\c[9]任务目标:
  151. 问克萝莉亚要一个药瓶,交给西露达
  152.  
  153. \\c[0]药瓶:#{$game_party.item_number(38)}/1
  154.  
  155. 西露达:
  156. 克萝莉亚就在西边的屋子里"
  157.     @tasks_info[2] = Game_Task.new(名称, 简介)
  158.  
  159.     #-----------------------------
  160.     # 示例任务3:灵魂线
  161.     #-----------------------------
  162.     #-讲解-
  163.     # 这里用了条件判断,当3号变量大于等于1时,加上“完成”字样,同时变色
  164.     #----
  165.     if $game_variables[3] >= 1
  166.       名称 = "\\c[8]灵魂线(完成)"
  167.       item = "\\c[8]灵魂线:#{$game_variables[3]}/1 (完成)"
  168.     else
  169.       名称 = "\\c[2]灵魂线"
  170.       item = "\\c[0]灵魂线:#{$game_variables[3]}/1"
  171.     end
  172.     #-讲解-
  173.     # 预先定义变量,用内嵌表达式插入
  174.     # 最后用了显示图标
  175.     #----
  176.     简介 = "#{名称}
  177.  
  178. \\c[9]任务目标:
  179. 找到埋起来的灵魂线,交给克萝莉亚
  180.  
  181. #{item}
  182.  
  183. \\c[0]克萝莉亚:
  184. 灵魂线就埋在其中一棵树下,给我好好找\\i[046-Skill03]"
  185.     @tasks_info[3] = Game_Task.new(名称, 简介)
  186.  
  187.   end
  188. end
  189.  
  190. #==============================================================================
  191. # ■ Interpreter
  192. #------------------------------------------------------------------------------
  193. #  执行事件命令的解释器。本类在 Game_System 类
  194. # 与 Game_Event 类的内部使用。
  195. #==============================================================================
  196.  
  197. class Interpreter
  198.   #--------------------------------------------------------------------------
  199.   # ● 接受任务
  200.   #--------------------------------------------------------------------------
  201.   def get_task(id)
  202.     task = $game_party.tasks_info[id]
  203.     return true if (task.nil? or $game_party.current_tasks.include?(task.id))
  204.     $game_party.current_tasks.unshift(task.id)
  205.     return true
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ● 获得全部任务
  209.   #--------------------------------------------------------------------------
  210.   def get_all_task
  211.     # 清空当前任务
  212.     $game_party.current_tasks.clear
  213.     for task in $game_party.tasks_info
  214.       next if task.nil?
  215.       $game_party.current_tasks.unshift(task.id)
  216.     end
  217.     return true
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ● 完成/放弃任务
  221.   #--------------------------------------------------------------------------
  222.   def finish_task(id)
  223.     task = $game_party.tasks_info[id]
  224.     return true if task.nil?
  225.     $game_party.current_tasks.delete(task.id)
  226.     return true
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # ● 删除全部任务
  230.   #--------------------------------------------------------------------------
  231.   def finish_all_task
  232.     $game_party.current_tasks.clear
  233.     return true
  234.   end
  235. end
  236.  
  237. #==============================================================================
  238. # ■ Game_Party
  239. #------------------------------------------------------------------------------
  240. #  处理同伴的类。包含金钱以及物品的信息。本类的实例
  241. # 请参考 $game_party。
  242. #==============================================================================
  243.  
  244. class Game_Party
  245.   #--------------------------------------------------------------------------
  246.   # ● 定义实例变量
  247.   #--------------------------------------------------------------------------
  248.   attr_writer     :latest_task                  # 上次查看的任务
  249.   #--------------------------------------------------------------------------
  250.   # ● 取得任务资料
  251.   #--------------------------------------------------------------------------
  252.   def tasks_info
  253.     if @tasks_info.nil?
  254.       get_tasks_info
  255.     end
  256.     return @tasks_info
  257.   end
  258.   #--------------------------------------------------------------------------
  259.   # ● 取得当前任务
  260.   #--------------------------------------------------------------------------
  261.   def current_tasks
  262.     if @current_tasks.nil?
  263.       @current_tasks = []
  264.     end
  265.     return @current_tasks
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ● 上次查看的任务
  269.   #--------------------------------------------------------------------------
  270.   def latest_task
  271.     if !current_tasks.include?(@latest_task)
  272.       @latest_task = current_tasks[0]
  273.     end
  274.     return @latest_task
  275.   end
  276. end
  277.  
  278. #==============================================================================
  279. # ■ Game_Task
  280. #------------------------------------------------------------------------------
  281. #  处理任务的类。包含任务的信息。
  282. #==============================================================================
  283.  
  284. class Game_Task
  285.   attr_accessor   :name                   # 名称
  286.   attr_accessor   :briefing               # 简介
  287.   def initialize(name, briefing)
  288.     @name = name
  289.     @briefing = briefing
  290.   end
  291.   def height
  292.     text = @briefing.clone
  293.     x = 0
  294.     y = 64
  295.     min_y = 0
  296.     # 限制文字处理
  297.     begin
  298.       last_text = text.clone
  299.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  300.     end until text == last_text
  301.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  302.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  303.     end
  304.     # 为了方便、将 "\\\\" 变换为 "\000"
  305.     text.gsub!(/\\\\/) { "\000" }
  306.     # "\C" 变为 "\001"
  307.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  308.     # "\I" 变为 "\002"
  309.     text.gsub!(/\\[Ii]/) { "\002" }
  310.     # "\P" 变为 "\003"
  311.     text.gsub!(/\\[Pp]/) { "\003" }
  312.     # c 获取 1 个字 (如果不能取得文字就循环)
  313.     while ((c = text.slice!(/./m)) != nil)
  314.       # \\ 的情况下
  315.       if c == "\000"
  316.         # 还原为本来的文字
  317.         c = "\\"
  318.       end
  319.       # \C[n] 的情况下
  320.       if c == "\001"
  321.         # 更改文字色
  322.         text.sub!(/\[([0-9]+)\]/, "")
  323.         # 下面的文字
  324.         next
  325.       end
  326.       # 图标的情况下
  327.       if c == "\002"
  328.         icon_name = ''
  329.         while ((cha = text.slice!(/./m)) != ']')
  330.           next if cha == '['
  331.           icon_name += cha
  332.         end
  333.         icon = RPG::Cache.icon(icon_name)
  334.         if x + icon.width > 368
  335.           x = 0
  336.           y += [32, min_y].max
  337.           min_y = 0
  338.         end
  339.         x += 28
  340.         next
  341.       end
  342.       # 图片的情况下
  343.       if c == "\003"
  344.         pic_name = ''
  345.         while ((cha = text.slice!(/./m)) != ']')
  346.           next if cha == '['
  347.           pic_name += cha
  348.         end
  349.         pic = RPG::Cache.picture(pic_name)
  350.         if x + pic.width > 368
  351.           x = 0
  352.           y += [32, min_y].max
  353.           min_y = 0
  354.         end
  355.         x += pic.width
  356.         min_y = [pic.height, 32].max
  357.         next
  358.       end
  359.       # 另起一行文字的情况下
  360.       if c == "\n"
  361.         y += [32, min_y].max
  362.         min_y = 0
  363.         x = 0
  364.         # 下面的文字
  365.         next
  366.       end
  367.       # 自动换行处理
  368.       if x + 22 > 368
  369.         y += [32, min_y].max
  370.         min_y = 0
  371.         x = 0
  372.       end
  373.       # x 为要描绘文字的加法运算
  374.       x += 22
  375.     end
  376.     return (y + [32, min_y].max)
  377.   end
  378.   def id
  379.     return $game_party.tasks_info.index(self)
  380.   end
  381. end
  382.  
  383. #==============================================================================
  384. # ■ Window_Task_Name
  385. #------------------------------------------------------------------------------
  386. #  任务名称显示窗口。
  387. #==============================================================================
  388.  
  389. class Window_Task_Name < Window_Selectable
  390.   #--------------------------------------------------------------------------
  391.   # ● 初始化对像
  392.   #--------------------------------------------------------------------------
  393.   def initialize(tasks)
  394.     super(0, 0, 240, 480)
  395.     @tasks = []
  396.     for id in tasks
  397.       @tasks.push($game_party.tasks_info[id])
  398.     end
  399.     @item_max = tasks.size
  400.     self.contents = Bitmap.new(
  401.     self.width - 32, @item_max == 0 ? 32 : @item_max * 32)
  402.     refresh
  403.     self.index = 0
  404.   end
  405.   #--------------------------------------------------------------------------
  406.   # ● 刷新
  407.   #--------------------------------------------------------------------------
  408.   def refresh
  409.     self.contents.clear
  410.     if @tasks != []
  411.       for task in @tasks
  412.         draw_item(task)
  413.       end
  414.     else
  415.       draw_blank
  416.     end
  417.   end
  418.   #--------------------------------------------------------------------------
  419.   # ● 描绘项目
  420.   #--------------------------------------------------------------------------
  421.   def draw_item(task)
  422.     text = task.name.clone
  423.     x = 0
  424.     y = @tasks.index(task) * 32
  425.     # 限制文字处理
  426.     begin
  427.       last_text = text.clone
  428.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  429.     end until text == last_text
  430.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  431.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  432.     end
  433.     # 为了方便、将 "\\\\" 变换为 "\000"
  434.     text.gsub!(/\\\\/) { "\000" }
  435.     # "\\C" 变为 "\001"
  436.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  437.     # "\I" 变为 "\002"
  438.     text.gsub!(/\\[Ii]/) { "\002" }
  439.     # "\P" 变为 "\003"
  440.     text.gsub!(/\\[Pp]/) { "\003" }
  441.     # c 获取 1 个字 (如果不能取得文字就循环)
  442.     while ((c = text.slice!(/./m)) != nil)
  443.       # \\ 的情况下
  444.       if c == "\000"
  445.         # 还原为本来的文字
  446.         c = "\\"
  447.       end
  448.       # \C[n] 的情况下
  449.       if c == "\001"
  450.         # 更改文字色
  451.         text.sub!(/\[([0-9]+)\]/, "")
  452.         color = $1.to_i
  453.         if color >= 0 and color <= 7
  454.           self.contents.font.color = text_color(color)
  455.         elsif color == 8
  456.           self.contents.font.color = disabled_color
  457.         elsif color == 9
  458.           self.contents.font.color = system_color
  459.         end
  460.         # 下面的文字
  461.         next
  462.       end
  463.       # 图标的情况下
  464.       if c == "\002"
  465.         icon_name = ''
  466.         while ((cha = text.slice!(/./m)) != ']')
  467.           next if cha == '['
  468.           icon_name += cha
  469.         end
  470.         icon = RPG::Cache.icon(icon_name)
  471.         if x + icon.width > self.contents.width
  472.           x = 0
  473.           y += [32, min_y].max
  474.           min_y = 0
  475.         end
  476.         self.contents.blt(x + 4, y + 4, icon, Rect.new(0, 0, 24, 24))
  477.         x += 28
  478.         next
  479.       end
  480.       # 图片的情况下
  481.       if c == "\003"
  482.         pic_name = ''
  483.         while ((cha = text.slice!(/./m)) != ']')
  484.           next if cha == '['
  485.           pic_name += cha
  486.         end
  487.         pic = RPG::Cache.picture(pic_name)
  488.         if x + pic.width > self.contents.width
  489.           x = 0
  490.           y += [32, min_y].max
  491.           min_y = 0
  492.         end
  493.         self.contents.blt(x + 4, y, pic, Rect.new(0, 0, pic.width, pic.height))
  494.         x += pic.width
  495.         next
  496.       end
  497.       # 描绘文字
  498.       self.contents.draw_text(4 + x, y, 40, 32, c)
  499.       # x 为要描绘文字的加法运算
  500.       x += self.contents.text_size(c).width
  501.     end
  502.   end
  503.   #--------------------------------------------------------------------------
  504.   # ● 描绘空行
  505.   #--------------------------------------------------------------------------
  506.   def draw_blank
  507.     self.contents.font.color = disabled_color
  508.     rect = Rect.new(4, 0, self.contents.width - 8, 32)
  509.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  510.     self.contents.draw_text(rect, '当前没有任何任务')
  511.   end
  512.   #--------------------------------------------------------------------------
  513.   # ● 获取任务
  514.   #--------------------------------------------------------------------------
  515.   def task
  516.     return @tasks[self.index]
  517.   end
  518. end
  519.  
  520. #==============================================================================
  521. # ■ Window_Task
  522. #------------------------------------------------------------------------------
  523. #  任务内容显示窗口。
  524. #==============================================================================
  525.  
  526. class Window_Task < Window_Base
  527.   #--------------------------------------------------------------------------
  528.   # ● 初始化对像
  529.   #--------------------------------------------------------------------------
  530.   def initialize(task_id)
  531.     super(240, 0, 400, 480)
  532.     refresh(task_id)
  533.   end
  534.   #--------------------------------------------------------------------------
  535.   # ● 刷新内容
  536.   #--------------------------------------------------------------------------
  537.   def refresh(task_id)
  538.     self.oy = 0
  539.     self.visible = true
  540.     return if task_id.nil?
  541.     task = $game_party.tasks_info[task_id]
  542.     if !task.nil?
  543.       self.contents = Bitmap.new(self.width - 32, task.height)
  544.     else
  545.       self.contents = Bitmap.new(self.width - 32, self.height - 32)
  546.       return
  547.     end
  548.     self.contents.font.color = normal_color
  549.     # 描绘任务内容
  550.     draw_task_info(task)
  551.   end
  552.   #--------------------------------------------------------------------------
  553.   # ● 描绘任务内容
  554.   #--------------------------------------------------------------------------
  555.   def draw_task_info(task)
  556.     # 记录文字x坐标
  557.     x = 0
  558.     # 记录文字y坐标
  559.     y = 0
  560.     # 记录换行时y坐标最小加值
  561.     min_y = 0
  562.     self.contents.font.color = normal_color
  563.     # 描绘任务简介
  564.     text = task.briefing.clone
  565.     # 限制文字处理
  566.     begin
  567.       last_text = text.clone
  568.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  569.     end until text == last_text
  570.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  571.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  572.     end
  573.     # 为了方便、将 "\\\\" 变换为 "\000"
  574.     text.gsub!(/\\\\/) { "\000" }
  575.     # "\C" 变为 "\001"
  576.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  577.     # "\I" 变为 "\002"
  578.     text.gsub!(/\\[Ii]/) { "\002" }
  579.     # "\P" 变为 "\003"
  580.     text.gsub!(/\\[Pp]/) { "\003" }
  581.     # c 获取 1 个字 (如果不能取得文字就循环)
  582.     while ((c = text.slice!(/./m)) != nil)
  583.       # \\ 的情况下
  584.       if c == "\000"
  585.         # 还原为本来的文字
  586.         c = "\\"
  587.       end
  588.       # \C[n] 的情况下
  589.       if c == "\001"
  590.         # 更改文字色
  591.         text.sub!(/\[([0-9]+)\]/, "")
  592.         color = $1.to_i
  593.         if color >= 0 and color <= 7
  594.           self.contents.font.color = text_color(color)
  595.         elsif color == 8
  596.           self.contents.font.color = disabled_color
  597.         elsif color == 9
  598.           self.contents.font.color = system_color
  599.         end
  600.         # 下面的文字
  601.         next
  602.       end
  603.       # 图标的情况下
  604.       if c == "\002"
  605.         icon_name = ''
  606.         while ((cha = text.slice!(/./m)) != ']')
  607.           next if cha == '['
  608.           icon_name += cha
  609.         end
  610.         icon = RPG::Cache.icon(icon_name)
  611.         if x + icon.width > self.contents.width
  612.           x = 0
  613.           y += [32, min_y].max
  614.           min_y = 0
  615.         end
  616.         self.contents.blt(x + 4, y + 4, icon, Rect.new(0, 0, 24, 24))
  617.         x += 28
  618.         next
  619.       end
  620.       # 图片的情况下
  621.       if c == "\003"
  622.         pic_name = ''
  623.         while ((cha = text.slice!(/./m)) != ']')
  624.           next if cha == '['
  625.           pic_name += cha
  626.         end
  627.         pic = RPG::Cache.picture(pic_name)
  628.         if x + pic.width > self.contents.width
  629.           x = 0
  630.           y += [32, min_y].max
  631.           min_y = 0
  632.         end
  633.         self.contents.blt(x + 4, y, pic, Rect.new(0, 0, pic.width, pic.height))
  634.         x += pic.width
  635.         min_y = [pic.height, 32].max
  636.         next
  637.       end
  638.       # 另起一行文字的情况下
  639.       if c == "\n"
  640.         y += [32, min_y].max
  641.         min_y = 0
  642.         x = 0
  643.         # 下面的文字
  644.         next
  645.       end
  646.       # 自动换行处理
  647.       if x + self.contents.text_size(c).width > self.contents.width
  648.         y += [32, min_y].max
  649.         min_y = 0
  650.         x = 0
  651.       end
  652.       # 描绘文字
  653.       self.contents.draw_text(4 + x, y, 40, 32, c)
  654.       # x 为要描绘文字的加法运算
  655.       x += self.contents.text_size(c).width
  656.     end
  657.   end
  658. end
  659.  
  660. #==============================================================================
  661. # ■ Scene_Task
  662. #------------------------------------------------------------------------------
  663. #  处理任务画面的类。
  664. #==============================================================================
  665.  
  666. class Scene_Task
  667.   #--------------------------------------------------------------------------
  668.   # ● 主处理
  669.   #--------------------------------------------------------------------------
  670.   def main
  671.     # 刷新任务资料
  672.     $game_party.get_tasks_info
  673.     # 生成任务名称窗口
  674.     @task_names_window = Window_Task_Name.new($game_party.current_tasks)
  675.     @task_names_window.active = true
  676.     if $game_party.current_tasks != []
  677.       @task_names_window.index = $game_party.current_tasks.index($game_party.latest_task)
  678.     end
  679.     # 生成任务内容窗口
  680.     @task_info_window = Window_Task.new($game_party.latest_task)
  681.     @task_info_window.active = true
  682.     # 执行过渡
  683.     Graphics.transition
  684.     # 主循环
  685.     loop do
  686.       # 刷新游戏画面
  687.       Graphics.update
  688.       # 刷新输入信息
  689.       Input.update
  690.       # 刷新画面
  691.       update
  692.       # 如果画面被切换的话就中断循环
  693.       if $scene != self
  694.         break
  695.       end
  696.     end
  697.     # 准备过渡
  698.     Graphics.freeze
  699.     # 释放窗口
  700.     @task_names_window.dispose
  701.     @task_info_window.dispose
  702.   end
  703.   #--------------------------------------------------------------------------
  704.   # ● 刷新画面
  705.   #--------------------------------------------------------------------------
  706.   def update
  707.     # 刷新窗口
  708.     @task_names_window.update
  709.     @task_info_window.update
  710.     update_task_names_window
  711.   end
  712.   #--------------------------------------------------------------------------
  713.   # ● 刷新任务名称窗口
  714.   #--------------------------------------------------------------------------
  715.   def update_task_names_window
  716.     # 按下 B 键的情况下
  717.     if Input.trigger?(Input::B)
  718.       # 演奏取消 SE
  719.       $game_system.se_play($data_system.cancel_se)
  720.       # 这里设置返回的场景,返回地图是Scene_Map.new,菜单是Scene_Menu.new(任务界面index)
  721.       $scene = Scene_Map.new
  722.       return
  723.     end
  724.     # 按下 C 键的情况下
  725.     if Input.trigger?(Input::C)
  726.       # 无任务可显示的话
  727.       if @task_names_window.task == nil
  728.         # 演奏冻结 SE
  729.         $game_system.se_play($data_system.buzzer_se)
  730.         return
  731.       end
  732.       # 如果光标没有移动的话,翻页
  733.       if $game_party.latest_task == @task_names_window.task.id
  734.         if @task_info_window.oy + @task_info_window.height - 32 > @task_info_window.contents.height
  735.           @task_info_window.oy = 0
  736.         else
  737.           @task_info_window.oy += 480-32
  738.         end
  739.         if @task_info_window.contents.height > @task_info_window.height - 32
  740.           # 演奏翻页 SE
  741.           Audio.se_play(CHANGE_PAGE_SE)
  742.         end
  743.       else
  744.         @task_info_window.refresh(@task_names_window.task.id)
  745.         $game_party.latest_task = @task_names_window.task.id
  746.         # 演奏确定 SE
  747.         $game_system.se_play($data_system.decision_se)
  748.       end
  749.     end
  750.   end
  751. end
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
17 小时
注册时间
2011-9-28
帖子
13
8
 楼主| 发表于 2014-6-5 08:32:33 | 只看该作者
hys111111 发表于 2014-6-3 19:24
这是叶子的任务系统。
=begin
---------------------------------------------------------------------- ...

太感谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-26 08:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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