Project1

标题: 求一个任务脚本【完整又简单】! [打印本页]

作者: RMXP使用者    时间: 2011-10-3 15:04
标题: 求一个任务脚本【完整又简单】!
本帖最后由 RMXP使用者 于 2011-10-3 21:04 编辑

如题,一定要达到精简、不出错的效果!!!!!dsu_plus_rewardpost_czw
作者: 876417737    时间: 2011-10-3 15:17
这个...LZ你完全可以用事件啊 用不着脚本吧
难道LZ要用的是这个里面的脚本?



876417737于2011-10-3 15:28补充以下内容:
http://www.66rpg.com/htm/news465.htm
LZ参考 23那个问题
或LZ去看视频 http://www.tudou.com/home/dovesnow214/
作者: aaalbx    时间: 2011-10-3 18:35
本帖最后由 各种压力的猫君 于 2011-10-3 19:01 编辑
  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.   end
  167. end
  168.    
  169. #==============================================================================
  170. # ■ Interpreter
  171. #------------------------------------------------------------------------------
  172. #  执行事件命令的解释器。本类在 Game_System 类
  173. # 与 Game_Event 类的内部使用。
  174. #==============================================================================

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

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

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

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

  258. class Game_Task
  259.   attr_accessor   :name                   # 名称
  260.   attr_accessor   :briefing               # 简介
  261.   def initialize(name, briefing)
  262.     @name = name
  263.     @briefing = briefing
  264.   end
  265.   def height
  266.     text = @briefing.clone
  267.     x = 0
  268.     y = 64
  269.     min_y = 0
  270.     # 限制文字处理
  271.     begin
  272.       last_text = text.clone
  273.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  274.     end until text == last_text
  275.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  276.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  277.     end

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

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

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

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

  630. #==============================================================================
  631. # ■ Scene_Task
  632. #------------------------------------------------------------------------------
  633. #  处理任务画面的类。
  634. #==============================================================================

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

搜狗浏览器截图.jpg (21.48 KB, 下载次数: 2)

搜狗浏览器截图.jpg





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1