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

Project1

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

【VX】任务系统问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
85 小时
注册时间
2011-12-3
帖子
295
跳转到指定楼层
1
发表于 2011-12-11 18:40:01 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 各种压力的猫君 于 2011-12-11 21:36 编辑
  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. 改版 by snstar2006

  17. 修改部分:
  18. - 将XP的一些脚本改成VX版的
  19. - 将窗口大小缩放成VX的大小(依照比例)
  20. - 将一些会变成很长的脚本精简
  21.    (如:用$game_pary.item_no(物品编号)
  22.         代替原来的$game_party.item_number($data_items[物品编号]) = ="好长)
  23. - 精简一些代码,将 Window_Task_Name 和Window_Task 重合部分用继承方式精简
  24. - 依照VX的 RGSS2 规范编写 Scene_Task
  25. - 增加使用16进位颜色代码变换字体颜色功能
  26. - 修改Scene_Menu的召唤方式,使脚本新手使用起来更容易

  27. --------------------------------------------------------------------------
  28. 顾名思义,就是显示任务数据的界面
  29. 任务数据要预先在这里设定好
  30. 下载范例工程,能帮助你更快更好地掌握使用方法
  31. --------------------------------------------------------------------------
  32. 使用方法:

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

  34. 可以在事件中的「脚本」指令加入这段东西,
  35. 又或者修改 Scene_Menu 来增加一个显示任务的选项。
  36. 如果是修改 Scene_Menu 增加選項的話,请使用

  37.     $scene = Scene_Task.new(任务在菜单的index)

  38. 例如:$scene = Scene_Task.new(7)

  39. 2、设置任务数据

  40.   2.1、相关内容解析
  41.   
  42.   所有内容文字必须用双引号括住
  43.   
  44.   名称:任务的名字(显示在左边窗口中),大小为172×32,如果全部为文字的话,
  45.         够放九个全角字符
  46.         
  47.   简介:任务的介绍(显示在右边窗口中),宽308,高不限
  48.   
  49.         文字可以自动换行
  50.   
  51.    2.1.1、控制码解析
  52.    
  53.    名称和内容均可用控制码,注意两条反斜杠都要打!
  54.    
  55.    \\v[n] 显示n号变量
  56.    \\c[n] 改变字体颜色。n 为窗口外观图片中所设定的颜色,可为0-31

  57.    \\c[HRRGGBB]设定字体颜色为RRGGBB色, RRGGBB 为16进位颜色代码
  58.    \\n[i] 显示i号角色名字
  59.    \\i[图标编号] 显示图标    # 图标编号为图标在IconSet里的顺序
  60.    \\p[文件名] 显示图片
  61.    
  62.    2.1.2、高级:内嵌表达式
  63.         
  64.    请参考帮助-脚本入门-字符串-内嵌表达式相关内容。
  65.    它可以用来在任务的名称和简介那里显示变量。
  66.    常用的表达式(注意不要漏了井号和大括号):
  67.    #{$game_variables[n]}       ——插入n号变量的值
  68.    #{$game_party.item_no(n)}  —— 插入持有n号物品数量
  69.                                   同理还有 weapon_no,armor_no

  70.    还可以预先定义一个变量,再插入(例子见示例任务3-灵魂线)
  71.    
  72.   2.2、注意事项
  73.   
  74.    2.2.1、括号、逗号和双引号 [ ] , " 必须使用半角符号(英文输入),
  75.           引号内的内容则没有关系
  76.          
  77.    2.2.2、单引号 ' 和双引号 " 的区别:
  78.           为了不出错误,全部用双引号吧!当然如果你对Ruby很熟悉,那就没所谓了
  79.   
  80.   2.3、开始设置吧!
  81.   从107行开始设置任务数据,可以参考示例任务来设置,请仔细阅读附加讲解
  82.   
  83. 3、接受任务

  84. 事件里的「脚本」指令输入:get_task(任务ID)
  85. 例如 get_task(1) 就是接受1号任务

  86.   3.1、获得全部任务
  87.   
  88.   事件里的「脚本」指令输入:get_all_task
  89.   这个功能基本上是用来在编写好所有任务数据后测试排版的
  90.   

  91. 4、完成/删除任务

  92. 事件里的「脚本」指令输入:finish_task(任务ID)
  93. 例如 finish_task(1) 就是完成1号任务

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

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

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

  105. class Game_Party
  106.   #--------------------------------------------------------------------------
  107.   # ● 设置任务资料
  108.   #--------------------------------------------------------------------------
  109.   def get_tasks_info
  110.     @tasks_info = []
  111.    
  112.     #-讲解-
  113.     # 三个示例任务由浅入深,其实只要看懂第一个就可以使用了。
  114.     # 任务的写法多种多样,不限于这三个任务的方法
  115.     #----
  116.     #-----------------------------
  117.     # 示例任务1:沙漠中的五叶花
  118.     #-----------------------------
  119.     名称 = "\\c[6]沙漠中的五叶花"
  120.     #-讲解-
  121.     # 注意!脚本编辑器的变色功能并不是非常完善,所以换行后字变黑了,但仍然是字符
  122.     # 串的一部分,所以不要忘记在内容最后打一个双引号
  123.     # 按回车是强制换行
  124.     #----
  125.     简介 = "\\c[6]沙漠中的五叶花

  126. \\c[9]任务目标:
  127. 获得5朵五叶花,交给西露达

  128. \\c[0]五叶花数目:\\v[1]/5

  129. 西露达:
  130. \\c[Hff0000]人家等着你的花哦~"
  131.     #-讲解-
  132.     # 每个任务最后一定要加上:
  133.     # @tasks_info[任务ID] = Game_Task.new(名称, 简介)
  134.     # 接受任务和完成任务都是用这个任务ID来索引
  135.     #----
  136.     @tasks_info[1] = Game_Task.new(名称, 简介)
  137.    
  138.     #-----------------------------
  139.     # 示例任务2:克萝莉亚的药瓶
  140.     #-----------------------------
  141.     名称 = "\\c[6]克萝莉亚的药瓶"
  142.     #-讲解-
  143.     # 这里使用了字符串相加,例如 s = "a" + "b" ,s 就是 "ab"
  144.     # 还用了内嵌表达式,$game_party.item_number(38) 就是38号物品的数量
  145.     #----
  146.     简介 = 名称 + "
  147.    
  148. \\c[9]任务目标:
  149. 问克萝莉亚要一个药瓶,交给西露达

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

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

  176. #{item}

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

  189. class Game_Interpreter
  190.   #--------------------------------------------------------------------------
  191.   # ● 接受任务
  192.   #--------------------------------------------------------------------------
  193.   def get_task(id)
  194.     task = $game_party.tasks_info[id]
  195.     return true if (task.nil? or $game_party.current_tasks.include?(task.id))
  196.     $game_party.current_tasks.unshift(task.id)
  197.     return true
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ● 获得全部任务
  201.   #--------------------------------------------------------------------------
  202.   def get_all_task
  203.     # 清空当前任务
  204.     $game_party.current_tasks.clear
  205.     for task in $game_party.tasks_info
  206.       next if task.nil?
  207.       $game_party.current_tasks.unshift(task.id)
  208.     end
  209.     return true
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ● 完成/放弃任务
  213.   #--------------------------------------------------------------------------
  214.   def finish_task(id)
  215.     task = $game_party.tasks_info[id]
  216.     return true if task.nil?
  217.     $game_party.current_tasks.delete(task.id)
  218.     return true
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ● 删除全部任务
  222.   #--------------------------------------------------------------------------
  223.   def finish_all_task
  224.     $game_party.current_tasks.clear
  225.     return true
  226.   end
  227. end

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

  234. class Game_Party
  235.   #--------------------------------------------------------------------------
  236.   # ● 定义实例变量
  237.   #--------------------------------------------------------------------------
  238.   attr_writer     :latest_task                  # 上次查看的任务
  239.   #--------------------------------------------------------------------------
  240.   # ● 取得任务资料
  241.   #--------------------------------------------------------------------------
  242.   def tasks_info
  243.     if @tasks_info.nil?
  244.       get_tasks_info
  245.     end
  246.     return @tasks_info
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # ● 取得当前任务
  250.   #--------------------------------------------------------------------------
  251.   def current_tasks
  252.     if @current_tasks.nil?
  253.       @current_tasks = []
  254.     end
  255.     return @current_tasks
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● 上次查看的任务
  259.   #--------------------------------------------------------------------------
  260.   def latest_task
  261.     if !current_tasks.include?(@latest_task)
  262.       @latest_task = current_tasks[0]
  263.     end
  264.     return @latest_task
  265.   end
  266. end

  267. #==============================================================================
  268. # ■ Game_Task
  269. #------------------------------------------------------------------------------
  270. #  处理任务的类。包含任务的信息。
  271. #==============================================================================

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

  369. #==============================================================================
  370. # ■ Window_Task_Name
  371. #------------------------------------------------------------------------------
  372. #  任务名称显示窗口。
  373. #==============================================================================

  374. class Window_Task_Name < Window_Selectable
  375.   #--------------------------------------------------------------------------
  376.   # ● 初始化对像
  377.   #--------------------------------------------------------------------------
  378.   def initialize(tasks)
  379.     super(0, 0, 204, 416)
  380.     @tasks = []
  381.     for id in tasks
  382.       @tasks.push($game_party.tasks_info[id])
  383.     end
  384.     @item_max = tasks.size
  385.     self.contents = Bitmap.new(
  386.     self.width - 32, @item_max == 0 ? 32 : @item_max * 32)
  387.     refresh
  388.     self.index = 0
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # ● 刷新
  392.   #--------------------------------------------------------------------------
  393.   def refresh
  394.     self.contents.clear
  395.     if @tasks != []
  396.       for task in @tasks
  397.         draw_item(task)
  398.       end
  399.     else
  400.       draw_blank
  401.     end
  402.   end
  403.   #--------------------------------------------------------------------------
  404.   # ● 描绘项目
  405.   #--------------------------------------------------------------------------
  406.   def draw_item(task)
  407.     text = task.name.clone
  408.     y = @tasks.index(task) * WLH
  409.     chenge_special_character(text, 0, y)
  410.   end
  411.   #--------------------------------------------------------------------------
  412.   # ● 描绘空行
  413.   #--------------------------------------------------------------------------
  414.   def draw_blank
  415.     self.contents.font.color = Color.new(255, 255, 255, 128)
  416.     rect = Rect.new(4, 0, self.contents.width - 8, 32)
  417.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  418.     self.contents.draw_text(rect, '当前没有任何任务')
  419.   end
  420.   #--------------------------------------------------------------------------
  421.   # ● 获取任务
  422.   #--------------------------------------------------------------------------
  423.   def task
  424.     return @tasks[self.index]
  425.   end
  426. end
  427.   
  428. #==============================================================================
  429. # ■ Window_Task
  430. #------------------------------------------------------------------------------
  431. #  任务内容显示窗口。
  432. #==============================================================================

  433. class Window_Task < Window_Base
  434.   #--------------------------------------------------------------------------
  435.   # ● 初始化对像
  436.   #--------------------------------------------------------------------------
  437.   def initialize(task_id)
  438.     super(204, 0, 340, 416)
  439.     refresh(task_id)
  440.   end
  441.   #--------------------------------------------------------------------------
  442.   # ● 刷新内容
  443.   #--------------------------------------------------------------------------
  444.   def refresh(task_id)
  445.     self.oy = 0
  446.     self.visible = true
  447.     return if task_id.nil?
  448.     task = $game_party.tasks_info[task_id]
  449.     if !task.nil?
  450.       self.contents = Bitmap.new(self.width - 32, task.height)
  451.     else
  452.       self.contents = Bitmap.new(self.width - 32, self.height - 32)
  453.       return
  454.     end
  455.     self.contents.font.color = normal_color
  456.     # 描绘任务内容
  457.     draw_task_info(task)
  458.   end
  459.   #--------------------------------------------------------------------------
  460.   # ● 描绘任务内容
  461.   #--------------------------------------------------------------------------
  462.   def draw_task_info(task)
  463.     self.contents.font.color = normal_color
  464.     # 描绘任务简介
  465.     chenge_special_character(task.briefing.clone)
  466.   end
  467. end

  468. class Window_Base < Window
  469.   def chenge_special_character(text, x=0, y=0)
  470.     # 记录换行时y坐标最小加值
  471.     min_y = 0
  472.     # 限制文字处理
  473.     begin
  474.       last_text = text.clone
  475.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  476.     end until text == last_text
  477.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  478.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  479.     end
  480.     # 为了方便、将 "\\\\" 变换为 "\000"
  481.     text.gsub!(/\\\\/) { "\000" }
  482.     # "\C" 变为 "\001"
  483.     text.gsub!(/\\[Cc]\[([0-9a-zA-Z]+)\]/)  { "\001[#{$1}]" }
  484.     # "\I" 变为 "\002"
  485.     text.gsub!(/\\[Ii]/) { "\002" }
  486.     # "\P" 变为 "\003"
  487.     text.gsub!(/\\[Pp]/) { "\003" }
  488.     # c 获取 1 个字 (如果不能取得文字就循环)
  489.     while ((c = text.slice!(/./m)) != nil)
  490.       # \\ 的情况下
  491.       if c == "\000"
  492.         # 还原为本来的文字
  493.         c = "\\"
  494.       end
  495.       # \C[n] 的情況下
  496.       if c == "\001"
  497.         # 更改文字色
  498.         text.sub!(/\[([0-9a-zA-Z]+)\]/, "")
  499.         # 如果是设定RGB颜色
  500.         if $1[0,1]=="H"
  501.           # 先拷贝一下文字
  502.           c=$1.dup
  503.           # 分3段分别取出R,G,B颜色
  504.           c.sub!(/H([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})/, "")
  505.           # 设定文字颜色
  506.           self.contents.font.color = Color.new($1.to_i(16), $2.to_i(16), $3.to_i(16))
  507.         else
  508.           color = $1.to_i
  509.           if color >= 0 and color <= 31
  510.             self.contents.font.color = text_color(color)
  511.           elsif color == 32
  512.             self.contents.font.color = disabled_color
  513.           elsif color == 33
  514.             self.contents.font.color = system_color
  515.           end
  516.         end
  517.         # 下面的文字
  518.         next
  519.       end
  520.       # 图标的情况下
  521.       if c == "\002"
  522.         icon_name = ''
  523.         while ((cha = text.slice!(/./m)) != ']')
  524.           next if cha == '['
  525.           icon_name += cha
  526.         end
  527.         if x + 24 > self.contents.width
  528.           x = 0
  529.           y += [WLH, min_y].max
  530.           min_y = 0
  531.         end
  532.         draw_icon(icon_name.to_i, x+4, y+4, true)
  533.         x += 28
  534.         next
  535.       end
  536.       # 图片的情况下
  537.       if c == "\003"
  538.         pic_name = ''
  539.         while ((cha = text.slice!(/./m)) != ']')
  540.           next if cha == '['
  541.           pic_name += cha
  542.         end
  543.         pic = Cache.picture(pic_name)
  544.         if x + pic.width > self.contents.width
  545.           x = 0
  546.           y += [WLH, min_y].max
  547.           min_y = 0
  548.         end
  549.         self.contents.blt(x + 4, y, pic, Rect.new(0, 0, pic.width, pic.height))
  550.         x += pic.width
  551.         min_y = [pic.height, WLH].max
  552.         next
  553.       end
  554.       # 另起一行文字的情况下
  555.       if c == "\n"
  556.         y += [WLH, min_y].max
  557.         min_y = 0
  558.         x = 0
  559.         # 下面的文字
  560.         next
  561.       end
  562.       # 自动换行处理
  563.       if x + self.contents.text_size(c).width > self.contents.width
  564.         y += [WLH, min_y].max
  565.         min_y = 0
  566.         x = 0
  567.       end
  568.       # 描绘文字
  569.       self.contents.draw_text(4 + x, y, 40, WLH, c)
  570.       # x 为要描绘文字的加法运算
  571.       x += self.contents.text_size(c).width
  572.     end
  573.   end
  574. end

  575. class Game_Party < Game_Unit
  576.   def item_no(n)
  577.     return item_number($data_items[n])
  578.   end
  579.   def weapon_no(n)
  580.     return item_number($data_weapons[n])
  581.   end
  582.   def armor_no(n)
  583.     return item_number($data_armors[n])
  584.   end
  585. end

  586. #==============================================================================
  587. # ■ Scene_Task
  588. #------------------------------------------------------------------------------
  589. #  处理任务画面的类。
  590. #==============================================================================

  591. class Scene_Task < Scene_Base
  592.   def initialize(index=nil)
  593.     @menu_index = index
  594.   end
  595.   #--------------------------------------------------------------------------
  596.   # ● 主处理
  597.   #--------------------------------------------------------------------------
  598.   def start
  599.     # 刷新任务资料
  600.     $game_party.get_tasks_info
  601.     # 生成任务名称窗口
  602.     @task_names_window = Window_Task_Name.new($game_party.current_tasks)
  603.     @task_names_window.active = true
  604.     if $game_party.current_tasks != []
  605.       @task_names_window.index = $game_party.current_tasks.index($game_party.latest_task)
  606.     end
  607.     # 生成任务内容窗口
  608.     @task_info_window = Window_Task.new($game_party.latest_task)
  609.     @task_info_window.active = true
  610.   end

  611.   def terminate
  612.     # 释放窗口
  613.     @task_names_window.dispose
  614.     @task_info_window.dispose
  615.   end
  616.   #--------------------------------------------------------------------------
  617.   # ● 刷新画面
  618.   #--------------------------------------------------------------------------
  619.   def update
  620.     # 刷新窗口
  621.     @task_names_window.update
  622.     @task_info_window.update
  623.     update_task_names_window
  624.   end
  625.   #--------------------------------------------------------------------------
  626.   # ● 刷新任务名称窗口
  627.   #--------------------------------------------------------------------------
  628.   def update_task_names_window
  629.     # 按下 B 键的情况下
  630.     if Input.trigger?(Input::B)
  631.       # 演奏取消 SE
  632.       Sound.play_cancel
  633.       # 这里设置返回的场景,返回地图是Scene_Map.new,菜单是Scene_Menu.new(任务界面index)
  634.       if @menu_index == nil
  635.         $scene = Scene_Map.new
  636.       else
  637.         $scene = Scene_Menu.new(@menu_index)
  638.       end
  639.       return
  640.     end
  641.     # 按下 C 键的情况下
  642.     if Input.trigger?(Input::C)
  643.       # 无任务可显示的话
  644.       if @task_names_window.task == nil
  645.         # 演奏冻结 SE
  646.         Sound.play_buzzer
  647.         return
  648.       end
  649.       # 如果光标没有移动的话,翻页
  650.       if $game_party.latest_task == @task_names_window.task.id
  651.         if @task_info_window.oy + @task_info_window.height - 32 > @task_info_window.contents.height
  652.           @task_info_window.oy = 0
  653.         else
  654.           @task_info_window.oy += 480-32
  655.         end
  656.         if @task_info_window.contents.height > @task_info_window.height - 32
  657.           # 演奏翻页 SE
  658.           Sound.se_play(CHANGE_PAGE_SE)
  659.         end
  660.       else
  661.         @task_info_window.refresh(@task_names_window.task.id)
  662.         $game_party.latest_task = @task_names_window.task.id
  663.         # 演奏确定 SE
  664.         Sound.play_decision
  665.       end
  666.     end
  667.   end
  668. end
复制代码
这是叶子大大的脚本。
插在MAIN前面我知道了,问题是我不知道怎么呼出来……
菜单我也修改过了,就是不知道在事件脚本里写什么东西能把任务呼出来?
求傻瓜教程~

点评

认可已处理,脚本框帮你编辑了下次记得用 - - (编辑器上<>这个图标就是)  发表于 2011-12-11 21:36
已经上范例了  发表于 2011-12-11 19:24
先记住把脚本内容用代码括起来  发表于 2011-12-11 18:42

走的太快,灵魂会跟不上的。

Lv2.观梦者

梦石
0
星屑
448
在线时间
628 小时
注册时间
2011-9-27
帖子
3996
2
发表于 2011-12-11 18:44:58 | 只看该作者
本帖最后由 小白玩家 于 2011-12-11 19:23 编辑
  1. 使用方法:

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

  3. 可以在事件中的「脚本」指令加入这段东西,
  4. 又或者修改 Scene_Menu 来增加一个显示任务的选项。
  5. 如果是修改 Scene_Menu 增加選項的話,请使用

  6.     $scene = Scene_Task.new(任务在菜单的index)

  7. 例如:$scene = Scene_Task.new(7)

  8. 2、设置任务数据

  9.   2.1、相关内容解析
  10.    
  11.    所有内容文字必须用双引号括住
  12.    
  13.    名称:任务的名字(显示在左边窗口中),大小为172×32,如果全部为文字的话,
  14.          够放九个全角字符
  15.          
  16.    简介:任务的介绍(显示在右边窗口中),宽308,高不限
  17.    
  18.          文字可以自动换行
  19.    
  20.     2.1.1、控制码解析
  21.    
  22.     名称和内容均可用控制码,注意两条反斜杠都要打!
  23.    
  24.     \\v[n] 显示n号变量
  25.     \\c[n] 改变字体颜色。n 为窗口外观图片中所设定的颜色,可为0-31

  26.    \\c[HRRGGBB]设定字体颜色为RRGGBB色, RRGGBB 为16进位颜色代码
  27.     \\n[i] 显示i号角色名字
  28.     \\i[图标编号] 显示图标    # 图标编号为图标在IconSet里的顺序
  29.     \\p[文件名] 显示图片
  30.    
  31.     2.1.2、高级:内嵌表达式
  32.          
  33.     请参考帮助-脚本入门-字符串-内嵌表达式相关内容。
  34.     它可以用来在任务的名称和简介那里显示变量。
  35.     常用的表达式(注意不要漏了井号和大括号):
  36.     #{$game_variables[n]}       ——插入n号变量的值
  37.     #{$game_party.item_no(n)}  —— 插入持有n号物品数量
  38.                                    同理还有 weapon_no,armor_no

  39.    还可以预先定义一个变量,再插入(例子见示例任务3-灵魂线)
  40.    
  41.    2.2、注意事项
  42.    
  43.     2.2.1、括号、逗号和双引号 [ ] , " 必须使用半角符号(英文输入),
  44.            引号内的内容则没有关系
  45.            
  46.    2.2.2、单引号 ' 和双引号 " 的区别:
  47.            为了不出错误,全部用双引号吧!当然如果你对Ruby很熟悉,那就没所谓了
复制代码
为什么你要无视它呢,再具体的也具体不了它了吧
菜单添加新的指令方法↓
http://rpg.blue/forum.php?mod=vi ... =%E8%8F%9C%E5%8D%95
这个是唤出任务界面的方法
发布任务在NPC对话下面用事件脚本get_task(1)#得到任务一
具体任务写在脚本里
  1. def get_tasks_info
  2.     @tasks_info = []
  3.    
  4.    
  5.     名称 = "\\c[6]火红女皇"
  6.    
  7.     简介 = "\\c[2]主线任务

  8. \\c[3]任务目标:
  9. 获得火红女皇的主板

  10. \\c[6]提示:
  11. \\c[0]火红女皇就在智能中心,杀死火红女皇将得到主板。"
  12.     @tasks_info[1] = Game_Task.new(名称, 简介)
复制代码

1.jpg (18.79 KB, 下载次数: 22)

1.jpg

2.jpg (71.48 KB, 下载次数: 21)

2.jpg

叶子任务.rar

243.58 KB, 下载次数: 878

点评

没啥^_^~我总算是搞懂了……搞懂的同时感觉头又大了一圈……这我要做成开放式任务得多费劲啊……  发表于 2011-12-11 21:04
邪恶什么,难道我发错东西了?  发表于 2011-12-11 20:41
正在研究……话说怪好邪恶的说~  发表于 2011-12-11 20:37
马上范例上来  发表于 2011-12-11 19:14
这个具体任务的脚本插在哪里啊?我插在MAIN前面好像不行啊……  发表于 2011-12-11 19:05

评分

参与人数 1星屑 +200 梦石 +2 收起 理由
各种压力的猫君 + 200 + 2 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 14:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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