Project1

标题: 如何添加任务 [打印本页]

作者: wojiushiwo79461    时间: 2012-2-18 09:43
标题: 如何添加任务
。。。。。。我又来也,我有一个任务脚本了,怎样添加任务,求大虾。。。dsu_plus_rewardpost_czw
作者: 526832541    时间: 2012-2-18 09:48
如果是叶子的详尽任务显示界面 v2.1的话 倒是很简单!
在事件脚本中加入“get_task(任务ID)” 如:事先设置好的任务ID是1的话,那么就get_task(1)
完成了任务后 需要再次去掉该任务,事件脚本:finish_task(1)

设置任务内容可以在脚本的113行进行编辑,脚本上有说明
作者: wojiushiwo79461    时间: 2012-2-18 09:51
526832541 发表于 2012-2-18 09:48
如果是叶子的详尽任务显示界面 v2.1的话 倒是很简单!
在事件脚本中加入“get_task(任务ID)” 如:事先设置 ...

额,,,,ID是神马
作者: aaalbx    时间: 2012-2-18 09:51
你至少也.....贴出脚本吧
作者: wojiushiwo79461    时间: 2012-2-18 09:53
aaalbx 发表于 2012-2-18 09:51
你至少也.....贴出脚本吧

等下。。
作者: ftf20202    时间: 2012-2-24 21:47
上述中,你会见到“任务1”,“任务2”,“任务3”……
你只需仿照“任务2”的写法,以后都是这样,无论你打多少字也能自动换行,好像是19个字左右
可以改的有(我说的是116行开始):

116的#号(通常#号后面的做注释,可不写)
名称=""的双引号内,双引号必须用英文的,不能用中文的(如118行)
目标=""同上,显示在右上(如120-128行)

如果要开始任务,请在事件中(别告诉我连什么是事件都不知道)用第三页的最后一个(脚本)
然后在里面填get_task(1),那么任务里就能见到“任务1”中设置的字了
同样,get_task(2)就是见到“任务2”中的字

D:\QQ截图20120224212955.jpg

如果不够用,你可以复制140-147行再慢慢修改(复制是为了防止出错)
  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/菜单打开"
  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[3]主线任务"
  106.     #----
  107.     目标 = "\\c[6]山间寻师傅

  108. \\c[9]任务介绍:
  109. 现在什么都没学会,还是到山间小屋那边找师傅刘俊宏吧                         温馨提示:山间小屋在大草地的右上方。
  110. 任务奖励:               EXP 60
  111.                          银两 500
  112.                          包子x10
  113.                          佛手x10
  114.                          鬼切草x10"

  115.     #-讲解-
  116.     # 每个任务最后一定要加上:
  117.     # @tasks_info[任务ID] = Game_Task.new(名称,目标)
  118.     # 接受任务和完成任务都是用这个任务ID来索引
  119.     #----
  120.     @tasks_info[1] = Game_Task.new(名称, 目标)
  121.    
  122.     #-----------------------------
  123.     # 任务2:休息
  124.     #-----------------------------
  125.     名称 = "\\c[3]主线任务"
  126.     #----
  127.     目标 = "\\c[6]回自己房间休息
  128.    
  129. \\c[9]任务介绍:
  130. 回自己房间休息,明日一早与师傅学习“牛刀小试”技能。"
  131.     #----
  132.     @tasks_info[2] = Game_Task.new(名称, 目标)
  133.    
  134.     #-----------------------------
  135.     # 任务3:奇怪的打架声
  136.     #-----------------------------
  137.     名称 = "\\c[3]主线任务"
  138.     #----
  139.     目标 = "\\c[6]奇怪的打架声
  140.    
  141. \\c[9]任务介绍:
  142. 刚刚听到一阵奇怪的打架声,快快出门口,看看怎么一回事。"
  143.     #----
  144.     @tasks_info[3] = Game_Task.new(名称, 目标)
  145.    
  146.     #-----------------------------
  147.     # 任务4:与小尸搏斗
  148.     #-----------------------------
  149.     名称 = "\\c[3]主线任务"
  150.     #----
  151.     目标 = "\\c[6]与小尸搏斗
  152.    
  153. \\c[9]任务介绍:
  154. 小尸杀死了刘俊宏,作为徒儿的你也应该为其报仇。"
  155.     #----
  156.     @tasks_info[4] = Game_Task.new(名称, 目标)
  157.    
  158.     #-----------------------------
  159.     # 任务5:与小花对话
  160.     #-----------------------------
  161.     名称 = "\\c[3]主线任务"
  162.     #----
  163.     目标 = "\\c[6]与小花对话
  164.    
  165. \\c[9]任务介绍:
  166. 初探建邺,小花好像有话要跟你说,去看看她吧。

  167. 任务奖励:                  EXP 100
  168.                             银两 500
  169.                             包子x2
  170.                             佛手x1"
  171.     #----
  172.     @tasks_info[5] = Game_Task.new(名称, 目标)
  173.    
  174.     #-----------------------------
  175.     # 任务6:寻找万事通
  176.     #-----------------------------
  177.     名称 = "\\c[3]主线任务"
  178.     #----
  179.     目标 = "\\c[6]寻找万事通
  180.    
  181. \\c[9]任务介绍:
  182. 等级好像还是太低了,先在建邺城里找找万事通练练级吧。"
  183.     #----
  184.     @tasks_info[6] = Game_Task.new(名称, 目标)
  185.    
  186.     #-----------------------------
  187.     # 任务7:出建邺城
  188.     #-----------------------------
  189.     名称 = "\\c[3]主线任务"
  190.     #----
  191.     目标 = "\\c[6]出建邺城
  192.    
  193. \\c[9]任务介绍:
  194. 当你到6级的时候,你就可以到长安拜师了,要出长安,请在建邺城西南面寻找“建邺守卫”,点击他,方能到达江南野外。"
  195.     #----
  196.     @tasks_info[7] = Game_Task.new(名称, 目标)
  197.    
  198.     #-----------------------------
  199.     # 任务8:经验跑环任务1
  200.     #-----------------------------
  201.     名称 = "\\c[6]支线任务"
  202.     #----
  203.     目标 = "\\c[6]跑环任务
  204.    
  205. \\c[9]任务介绍:
  206. 目标:在东海湾战斗3场
  207. 进度:已战斗\\v[80]/3场。"
  208.     #----
  209.     @tasks_info[8] = Game_Task.new(名称, 目标)
  210.    
  211.     #-----------------------------
  212.     # 任务9:经验跑环任务2
  213.     #-----------------------------
  214.     名称 = "\\c[6]支线任务"
  215.     #----
  216.     目标 = "\\c[6]跑环任务
  217.    
  218. \\c[9]任务介绍:
  219. 目标:在东海海底战斗3场
  220. 进度:已战斗\\v[80]/3场。"

  221.     #----
  222.     @tasks_info[9] = Game_Task.new(名称, 目标)
  223.    
  224.     #-----------------------------
  225.     # 任务10:去客栈找郭妤
  226.     #-----------------------------
  227.     名称 = "\\c[6]支线任务"
  228.     #----
  229.     目标 = "\\c[6]跑环任务
  230.    
  231. \\c[9]任务介绍:
  232. 目标:在东海岩洞战斗3场
  233. 进度:已战斗\\v[80]/3场。"

  234.     #----
  235.     @tasks_info[10] = Game_Task.new(名称, 目标)
  236.    
  237.     #-----------------------------
  238.     # 任务11:再去奇迹帮
  239.     #-----------------------------
  240.     名称 = "\\c[6]当前主线任务"
  241.     #----
  242.     目标 = "\\c[6]再去奇迹帮
  243.    
  244. \\c[9]任务介绍:
  245. 吉吉精通音律应该可以破解文慧题库,再一次去奇迹帮试试看。"
  246.     #----
  247.     @tasks_info[11] = Game_Task.new(名称, 目标)
  248.    
  249.     #-----------------------------
  250.     # 任务12:深入奇迹帮
  251.     #-----------------------------
  252.     名称 = "\\c[6]当前主线任务"
  253.     #----
  254.     目标 = "\\c[6]深入奇迹帮
  255.    
  256. \\c[9]任务介绍:
  257. 进入了奇迹帮,四处看看有没有遗漏的线索。"
  258.     #----
  259.     @tasks_info[12] = Game_Task.new(名称, 目标)
  260.    
  261.     #-----------------------------
  262.     # 任务13:为牛晖疗伤
  263.     #-----------------------------
  264.     名称 = "\\c[6]当前主线任务"
  265.     #----
  266.     目标 = "\\c[6]为牛晖疗伤
  267.    
  268. \\c[9]任务介绍:
  269. 牛晖中了魔族的失心咒,回去找师傅看能不能解除。"
  270.     #----
  271.     @tasks_info[13] = Game_Task.new(名称, 目标)
  272.    
  273.     #-----------------------------
  274.     # 任务14:去丞相府邸
  275.     #-----------------------------
  276.     名称 = "\\c[6]当前主线任务"
  277.     #----
  278.     目标 = "\\c[6]去丞相府邸
  279.    
  280. \\c[9]任务介绍:
  281. 牛晖的病要入宫找皇后才能解除,先去皇城桂林找丞相刘济元,由他安排进入皇宫。"
  282.     #----
  283.     @tasks_info[14] = Game_Task.new(名称, 目标)
  284.    
  285.     #-----------------------------
  286.     # 任务15:进入皇宫
  287.     #-----------------------------
  288.     名称 = "\\c[6]当前主线任务"
  289.     #----
  290.     目标 = "\\c[6]进入皇宫
  291.    
  292. \\c[9]任务介绍:
  293. 得到刘济元的安排,可以进皇宫找皇后了。"
  294.     #----
  295.     @tasks_info[15] = Game_Task.new(名称, 目标)
  296.    
  297.     #-----------------------------
  298.     # 任务16:找齐伙伴出发
  299.     #-----------------------------
  300.     名称 = "\\c[6]当前主线任务"
  301.     #----
  302.     目标 = "\\c[6]找齐伙伴出发
  303.    
  304. \\c[9]任务介绍:
  305. 找齐所有的伙伴,再出发去冰域魔窟。"
  306.     #----
  307.     @tasks_info[16] = Game_Task.new(名称, 目标)
  308.    
  309.     #-----------------------------
  310.     # 任务17:战胜四大魔将
  311.     #-----------------------------
  312.     名称 = "\\c[6]当前主线任务"
  313.     #----
  314.     目标 = "\\c[6]战胜四大魔将
  315.    
  316. \\c[9]任务介绍:
  317. 为了能进入离苑,需要先去冰域魔窟战胜四大魔将。"
  318.     #----
  319.     @tasks_info[17] = Game_Task.new(名称, 目标)
  320.    
  321.     #-----------------------------
  322.     # 任务18:进离苑找文慧
  323.     #-----------------------------
  324.     名称 = "\\c[6]当前主线任务"
  325.     #----
  326.     目标 = "\\c[6]进离苑找文慧
  327.    
  328. \\c[9]任务介绍:
  329. 终于开启离苑的大门了,快进去找双生妖花文慧吧。"
  330.     #----
  331.     @tasks_info[18] = Game_Task.new(名称, 目标)
  332.    
  333.     #-----------------------------
  334.     # 任务19:去离苑回廊找文慧
  335.     #-----------------------------
  336.     名称 = "\\c[6]当前主线任务"
  337.     #----
  338.     目标 = "\\c[6]去离苑回廊找文慧
  339.    
  340. \\c[9]任务介绍:
  341. 师傅牺牲了自己,重伤了文慧,去离苑回廊找到受伤的文慧替师傅报仇。"
  342.     #----
  343.     @tasks_info[19] = Game_Task.new(名称, 目标)
  344.    
  345.     #-----------------------------
  346.     # 任务20:带郭妤回皇宫
  347.     #-----------------------------
  348.     名称 = "\\c[6]当前主线任务"
  349.     #----
  350.     目标 = "\\c[6]魔化的郭妤
  351.    
  352. \\c[9]任务介绍:
  353. 郭妤被文慧输入了魔力,入了魔,赶快进宫找御医为郭妤诊治。"
  354.     #----
  355.     @tasks_info[20] = Game_Task.new(名称, 目标)
  356.    
  357.     #-----------------------------
  358.     # 任务21:再去离苑
  359.     #-----------------------------
  360.     名称 = "\\c[6]当前主线任务"
  361.     #----
  362.     目标 = "\\c[6]再去离苑
  363.    
  364. \\c[9]任务介绍:
  365. 听说皇后去了离苑方向,为了治好郭妤只能再去一次离苑找皇后。"
  366.     #----
  367.     @tasks_info[21] = Game_Task.new(名称, 目标)
  368.    
  369.     #-----------------------------
  370.     # 任务22:再回皇宫
  371.     #-----------------------------
  372.     名称 = "\\c[6]当前主线任务"
  373.     #----
  374.     目标 = "\\c[6]再回皇宫
  375.    
  376. \\c[9]任务介绍:
  377. 先辉子和杰峰子双双神灭,皇后也薨了,现在只好再回皇宫看看郭妤的病情。"
  378.     #----
  379.     @tasks_info[22] = Game_Task.new(名称, 目标)
  380.    
  381.     #-----------------------------
  382.     # 任务23:魔化的丞相
  383.     #-----------------------------
  384.     名称 = "\\c[6]当前主线任务"
  385.     #----
  386.     目标 = "\\c[6]魔化的丞相
  387.    
  388. \\c[9]任务介绍:
  389. 丞相被上古魔神附体,快去帝王殿看看发生了什么事。"
  390.     #----
  391.     @tasks_info[23] = Game_Task.new(名称, 目标)
  392.    
  393.     #-----------------------------
  394.     # 任务24:客栈退房
  395.     #-----------------------------
  396.     名称 = "\\c[6]当前主线任务"
  397.     #----
  398.     目标 = "\\c[6]客栈退房
  399.    
  400. \\c[9]任务介绍:
  401. 找会仙客栈老板退房。"
  402.     #----
  403.     @tasks_info[24] = Game_Task.new(名称, 目标)
  404.    
  405.     #-----------------------------
  406.     # 任务25:支线任务
  407.     #-----------------------------
  408.     名称 = "\\c[6]当前支线任务"
  409.     #----
  410.     目标 = "\\c[6]鬼魂报丧
  411.    
  412. \\c[9]任务介绍:
  413. 遇到鬼魂小梅,得到残谱,去会仙镇向其父亲报丧。"
  414.     #----
  415.     @tasks_info[25] = Game_Task.new(名称, 目标)
  416.    
  417.     #-----------------------------
  418.     # 任务26:支线任务
  419.     #-----------------------------
  420.     名称 = "\\c[6]当前支线任务"
  421.     #----
  422.     目标 = "\\c[6]张老之托
  423.    
  424. \\c[9]任务介绍:
  425. 受张国磊之托,去皇城桂林向其准女婿张智伟报丧。"
  426.     #----
  427.     @tasks_info[26] = Game_Task.new(名称, 目标)
  428.    
  429.   end
  430. end
  431.    
  432. #==============================================================================
  433. # ■ Interpreter
  434. #------------------------------------------------------------------------------
  435. #  执行事件命令的解释器。本类在 Game_System 类
  436. # 与 Game_Event 类的内部使用。
  437. #==============================================================================

  438. class Interpreter
  439.   #--------------------------------------------------------------------------
  440.   # ● 接受任务
  441.   #--------------------------------------------------------------------------
  442.   def get_task(id)
  443.     task = $game_party.tasks_info[id]
  444.     return true if (task.nil? or $game_party.current_tasks.include?(task.id))
  445.     $game_party.current_tasks.unshift(task.id)
  446.     return true
  447.   end
  448.   #--------------------------------------------------------------------------
  449.   # ● 获得全部任务
  450.   #--------------------------------------------------------------------------
  451.   def get_all_task
  452.     # 清空当前任务
  453.     $game_party.current_tasks.clear
  454.     for task in $game_party.tasks_info
  455.       next if task.nil?
  456.       $game_party.current_tasks.unshift(task.id)
  457.     end
  458.     return true
  459.   end
  460.   #--------------------------------------------------------------------------
  461.   # ● 完成/放弃任务
  462.   #--------------------------------------------------------------------------
  463.   def finish_task(id)
  464.     task = $game_party.tasks_info[id]
  465.     return true if task.nil?
  466.     $game_party.current_tasks.delete(task.id)
  467.     return true
  468.   end
  469.   #--------------------------------------------------------------------------
  470.   # ● 删除全部任务
  471.   #--------------------------------------------------------------------------
  472.   def finish_all_task
  473.     $game_party.current_tasks.clear
  474.     return true
  475.   end
  476. end

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

  483. class Game_Party
  484.   #--------------------------------------------------------------------------
  485.   # ● 定义实例变量
  486.   #--------------------------------------------------------------------------
  487.   attr_writer     :latest_task                  # 上次查看的任务
  488.   #--------------------------------------------------------------------------
  489.   # ● 取得任务资料
  490.   #--------------------------------------------------------------------------
  491.   def tasks_info
  492.     if @tasks_info.nil?
  493.       get_tasks_info
  494.     end
  495.     return @tasks_info
  496.   end
  497.   #--------------------------------------------------------------------------
  498.   # ● 取得当前任务
  499.   #--------------------------------------------------------------------------
  500.   def current_tasks
  501.     if @current_tasks.nil?
  502.       @current_tasks = []
  503.     end
  504.     return @current_tasks
  505.   end
  506.   #--------------------------------------------------------------------------
  507.   # ● 上次查看的任务
  508.   #--------------------------------------------------------------------------
  509.   def latest_task
  510.     if !current_tasks.include?(@latest_task)
  511.       @latest_task = current_tasks[0]
  512.     end
  513.     return @latest_task
  514.   end
  515. end

  516. #==============================================================================
  517. # ■ Game_Task
  518. #------------------------------------------------------------------------------
  519. #  处理任务的类。包含任务的信息。
  520. #==============================================================================

  521. class Game_Task
  522.   attr_accessor   :name                   # 名称
  523.   attr_accessor   :briefing               # 简介
  524.   def initialize(name, briefing)
  525.     @name = name
  526.     @briefing = briefing
  527.   end
  528.   def height
  529.     text = @briefing.clone
  530.     x = 0
  531.     y = 64
  532.     min_y = 0
  533.     # 限制文字处理
  534.     begin
  535.       last_text = text.clone
  536.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  537.     end until text == last_text
  538.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  539.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  540.     end
  541.     # 为了方便、将 "\\\\" 变换为 "\000"
  542.     text.gsub!(/\\\\/) { "\000" }
  543.     # "\C" 变为 "\001"
  544.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  545.     # "\I" 变为 "\002"
  546.     text.gsub!(/\\[Ii]/) { "\002" }
  547.     # "\P" 变为 "\003"
  548.     text.gsub!(/\\[Pp]/) { "\003" }
  549.     # c 获取 1 个字 (如果不能取得文字就循环)
  550.     while ((c = text.slice!(/./m)) != nil)
  551.       # \\ 的情况下
  552.       if c == "\000"
  553.         # 还原为本来的文字
  554.         c = "\\"
  555.       end
  556.       # \C[n] 的情况下
  557.       if c == "\001"
  558.         # 更改文字色
  559.         text.sub!(/\[([0-9]+)\]/, "")
  560.         # 下面的文字
  561.         next
  562.       end
  563.       # 图标的情况下
  564.       if c == "\002"
  565.         icon_name = ''
  566.         while ((cha = text.slice!(/./m)) != ']')
  567.           next if cha == '['
  568.           icon_name += cha
  569.         end
  570.         icon = RPG::Cache.icon(icon_name)
  571.         if x + icon.width > 368
  572.           x = 0
  573.           y += [32, min_y].max
  574.           min_y = 0
  575.         end
  576.         x += 28
  577.         next
  578.       end
  579.       # 图片的情况下
  580.       if c == "\003"
  581.         pic_name = ''
  582.         while ((cha = text.slice!(/./m)) != ']')
  583.           next if cha == '['
  584.           pic_name += cha
  585.         end
  586.         pic = RPG::Cache.picture(pic_name)
  587.         if x + pic.width > 368
  588.           x = 0
  589.           y += [32, min_y].max
  590.           min_y = 0
  591.         end
  592.         x += pic.width
  593.         min_y = [pic.height, 32].max
  594.         next
  595.       end
  596.       # 另起一行文字的情况下
  597.       if c == "\n"
  598.         y += [32, min_y].max
  599.         min_y = 0
  600.         x = 0
  601.         # 下面的文字
  602.         next
  603.       end
  604.       # 自动换行处理
  605.       if x + 22 > 368
  606.         y += [32, min_y].max
  607.         min_y = 0
  608.         x = 0
  609.       end
  610.       # x 为要描绘文字的加法运算
  611.       x += 22
  612.     end
  613.     return (y + [32, min_y].max)
  614.   end
  615.   def id
  616.     return $game_party.tasks_info.index(self)
  617.   end
  618. end

  619. #==============================================================================
  620. # ■ Window_Task_Name
  621. #------------------------------------------------------------------------------
  622. #  任务名称显示窗口。
  623. #==============================================================================

  624. class Window_Task_Name < Window_Selectable
  625.   #--------------------------------------------------------------------------
  626.   # ● 初始化对像
  627.   #--------------------------------------------------------------------------
  628.   def initialize(tasks)
  629.     super(0, 0, 240, 480)
  630.     @tasks = []
  631.     for id in tasks
  632.       @tasks.push($game_party.tasks_info[id])
  633.     end
  634.     @item_max = tasks.size
  635.     self.contents = Bitmap.new(
  636.     self.width - 32, @item_max == 0 ? 32 : @item_max * 32)
  637.     refresh
  638.     self.index = 0
  639.   end
  640.   #--------------------------------------------------------------------------
  641.   # ● 刷新
  642.   #--------------------------------------------------------------------------
  643.   def refresh
  644.     self.contents.clear
  645.     if @tasks != []
  646.       for task in @tasks
  647.         draw_item(task)
  648.       end
  649.     else
  650.       draw_blank
  651.     end
  652.   end
  653.   #--------------------------------------------------------------------------
  654.   # ● 描绘项目
  655.   #--------------------------------------------------------------------------
  656.   def draw_item(task)
  657.     text = task.name.clone
  658.     x = 0
  659.     y = @tasks.index(task) * 32
  660.     # 限制文字处理
  661.     begin
  662.       last_text = text.clone
  663.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  664.     end until text == last_text
  665.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  666.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  667.     end
  668.     # 为了方便、将 "\\\\" 变换为 "\000"
  669.     text.gsub!(/\\\\/) { "\000" }
  670.     # "\\C" 变为 "\001"
  671.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  672.     # "\I" 变为 "\002"
  673.     text.gsub!(/\\[Ii]/) { "\002" }
  674.     # "\P" 变为 "\003"
  675.     text.gsub!(/\\[Pp]/) { "\003" }
  676.     # c 获取 1 个字 (如果不能取得文字就循环)
  677.     while ((c = text.slice!(/./m)) != nil)
  678.       # \\ 的情况下
  679.       if c == "\000"
  680.         # 还原为本来的文字
  681.         c = "\\"
  682.       end
  683.       # \C[n] 的情况下
  684.       if c == "\001"
  685.         # 更改文字色
  686.         text.sub!(/\[([0-9]+)\]/, "")
  687.         color = $1.to_i
  688.         if color >= 0 and color <= 7
  689.           self.contents.font.color = text_color(color)
  690.         elsif color == 8
  691.           self.contents.font.color = disabled_color
  692.         elsif color == 9
  693.           self.contents.font.color = system_color
  694.         end
  695.         # 下面的文字
  696.         next
  697.       end
  698.       # 图标的情况下
  699.       if c == "\002"
  700.         icon_name = ''
  701.         while ((cha = text.slice!(/./m)) != ']')
  702.           next if cha == '['
  703.           icon_name += cha
  704.         end
  705.         icon = RPG::Cache.icon(icon_name)
  706.         if x + icon.width > self.contents.width
  707.           x = 0
  708.           y += [32, min_y].max
  709.           min_y = 0
  710.         end
  711.         self.contents.blt(x + 4, y + 4, icon, Rect.new(0, 0, 24, 24))
  712.         x += 28
  713.         next
  714.       end
  715.       # 图片的情况下
  716.       if c == "\003"
  717.         pic_name = ''
  718.         while ((cha = text.slice!(/./m)) != ']')
  719.           next if cha == '['
  720.           pic_name += cha
  721.         end
  722.         pic = RPG::Cache.picture(pic_name)
  723.         if x + pic.width > self.contents.width
  724.           x = 0
  725.           y += [32, min_y].max
  726.           min_y = 0
  727.         end
  728.         self.contents.blt(x + 4, y, pic, Rect.new(0, 0, pic.width, pic.height))
  729.         x += pic.width
  730.         next
  731.       end
  732.       # 描绘文字
  733.       self.contents.draw_text(4 + x, y, 40, 32, c)
  734.       # x 为要描绘文字的加法运算
  735.       x += self.contents.text_size(c).width
  736.     end
  737.   end
  738.   #--------------------------------------------------------------------------
  739.   # ● 描绘空行
  740.   #--------------------------------------------------------------------------
  741.   def draw_blank
  742.     self.contents.font.color = disabled_color
  743.     rect = Rect.new(4, 0, self.contents.width - 8, 32)
  744.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  745.     self.contents.draw_text(rect, '当前没有任何任务')
  746.   end
  747.   #--------------------------------------------------------------------------
  748.   # ● 获取任务
  749.   #--------------------------------------------------------------------------
  750.   def task
  751.     return @tasks[self.index]
  752.   end
  753. end
  754.   
  755. #==============================================================================
  756. # ■ Window_Task
  757. #------------------------------------------------------------------------------
  758. #  任务内容显示窗口。
  759. #==============================================================================

  760. class Window_Task < Window_Base
  761.   #--------------------------------------------------------------------------
  762.   # ● 初始化对像
  763.   #--------------------------------------------------------------------------
  764.   def initialize(task_id)
  765.     super(240, 0, 400, 480)
  766.     refresh(task_id)
  767.   end
  768.   #--------------------------------------------------------------------------
  769.   # ● 刷新内容
  770.   #--------------------------------------------------------------------------
  771.   def refresh(task_id)
  772.     self.oy = 0
  773.     self.visible = true
  774.     return if task_id.nil?
  775.     task = $game_party.tasks_info[task_id]
  776.     if !task.nil?
  777.       self.contents = Bitmap.new(self.width - 32, task.height)
  778.     else
  779.       self.contents = Bitmap.new(self.width - 32, self.height - 32)
  780.       return
  781.     end
  782.     self.contents.font.color = normal_color
  783.     # 描绘任务内容
  784.     draw_task_info(task)
  785.   end
  786.   #--------------------------------------------------------------------------
  787.   # ● 描绘任务内容
  788.   #--------------------------------------------------------------------------
  789.   def draw_task_info(task)
  790.     # 记录文字x坐标
  791.     x = 0
  792.     # 记录文字y坐标
  793.     y = 0
  794.     # 记录换行时y坐标最小加值
  795.     min_y = 0
  796.     self.contents.font.color = normal_color
  797.     # 描绘任务简介
  798.     text = task.briefing.clone
  799.     # 限制文字处理
  800.     begin
  801.       last_text = text.clone
  802.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  803.     end until text == last_text
  804.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  805.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  806.     end
  807.     # 为了方便、将 "\\\\" 变换为 "\000"
  808.     text.gsub!(/\\\\/) { "\000" }
  809.     # "\C" 变为 "\001"
  810.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  811.     # "\I" 变为 "\002"
  812.     text.gsub!(/\\[Ii]/) { "\002" }
  813.     # "\P" 变为 "\003"
  814.     text.gsub!(/\\[Pp]/) { "\003" }
  815.     # c 获取 1 个字 (如果不能取得文字就循环)
  816.     while ((c = text.slice!(/./m)) != nil)
  817.       # \\ 的情况下
  818.       if c == "\000"
  819.         # 还原为本来的文字
  820.         c = "\\"
  821.       end
  822.       # \C[n] 的情况下
  823.       if c == "\001"
  824.         # 更改文字色
  825.         text.sub!(/\[([0-9]+)\]/, "")
  826.         color = $1.to_i
  827.         if color >= 0 and color <= 7
  828.           self.contents.font.color = text_color(color)
  829.         elsif color == 8
  830.           self.contents.font.color = disabled_color
  831.         elsif color == 9
  832.           self.contents.font.color = system_color
  833.         end
  834.         # 下面的文字
  835.         next
  836.       end
  837.       # 图标的情况下
  838.       if c == "\002"
  839.         icon_name = ''
  840.         while ((cha = text.slice!(/./m)) != ']')
  841.           next if cha == '['
  842.           icon_name += cha
  843.         end
  844.         icon = RPG::Cache.icon(icon_name)
  845.         if x + icon.width > self.contents.width
  846.           x = 0
  847.           y += [32, min_y].max
  848.           min_y = 0
  849.         end
  850.         self.contents.blt(x + 4, y + 4, icon, Rect.new(0, 0, 24, 24))
  851.         x += 28
  852.         next
  853.       end
  854.       # 图片的情况下
  855.       if c == "\003"
  856.         pic_name = ''
  857.         while ((cha = text.slice!(/./m)) != ']')
  858.           next if cha == '['
  859.           pic_name += cha
  860.         end
  861.         pic = RPG::Cache.picture(pic_name)
  862.         if x + pic.width > self.contents.width
  863.           x = 0
  864.           y += [32, min_y].max
  865.           min_y = 0
  866.         end
  867.         self.contents.blt(x + 4, y, pic, Rect.new(0, 0, pic.width, pic.height))
  868.         x += pic.width
  869.         min_y = [pic.height, 32].max
  870.         next
  871.       end
  872.       # 另起一行文字的情况下
  873.       if c == "\n"
  874.         y += [32, min_y].max
  875.         min_y = 0
  876.         x = 0
  877.         # 下面的文字
  878.         next
  879.       end
  880.       # 自动换行处理
  881.       if x + self.contents.text_size(c).width > self.contents.width
  882.         y += [32, min_y].max
  883.         min_y = 0
  884.         x = 0
  885.       end
  886.       # 描绘文字
  887.       self.contents.draw_text(4 + x, y, 40, 32, c)
  888.       # x 为要描绘文字的加法运算
  889.       x += self.contents.text_size(c).width
  890.     end
  891.   end
  892. end

  893. #==============================================================================
  894. # ■ Scene_Task
  895. #------------------------------------------------------------------------------
  896. #  处理任务画面的类。
  897. #==============================================================================

  898. class Scene_Task
  899.   #--------------------------------------------------------------------------
  900.   # ● 主处理
  901.   #--------------------------------------------------------------------------
  902.   def main
  903.     # 刷新任务资料
  904.     $game_party.get_tasks_info
  905.     # 生成任务名称窗口
  906.     @task_names_window = Window_Task_Name.new($game_party.current_tasks)
  907.     @task_names_window.active = true
  908.     if $game_party.current_tasks != []
  909.       @task_names_window.index = $game_party.current_tasks.index($game_party.latest_task)
  910.     end
  911.     # 生成任务内容窗口
  912.     @task_info_window = Window_Task.new($game_party.latest_task)
  913.     @task_info_window.active = true
  914.     # 执行过渡
  915.     Graphics.transition
  916.     # 主循环
  917.     loop do
  918.       # 刷新游戏画面
  919.       Graphics.update
  920.       # 刷新输入信息
  921.       Input.update
  922.       # 刷新画面
  923.       update
  924.       # 如果画面被切换的话就中断循环
  925.       if $scene != self
  926.         break
  927.       end
  928.     end
  929.     # 准备过渡
  930.     Graphics.freeze
  931.     # 释放窗口
  932.     @task_names_window.dispose
  933.     @task_info_window.dispose
  934.   end
  935.   #--------------------------------------------------------------------------
  936.   # ● 刷新画面
  937.   #--------------------------------------------------------------------------
  938.   def update
  939.     # 刷新窗口
  940.     @task_names_window.update
  941.     @task_info_window.update
  942.     update_task_names_window
  943.   end
  944.   #--------------------------------------------------------------------------
  945.   # ● 刷新任务名称窗口
  946.   #--------------------------------------------------------------------------
  947.   def update_task_names_window
  948.     # 按下 B 键的情况下
  949.     if Input.trigger?(Input::B)
  950.       # 演奏取消 SE
  951.       Audio.se_play = "Audio/SE/菜单关闭"
  952.       # 这里设置返回的场景,返回地图是Scene_Map.new,菜单是Scene_Menu.new(任务界面index)
  953.       $scene = Scene_Map.new
  954.       return
  955.     end
  956.     # 按下 C 键的情况下
  957.     if Input.trigger?(Input::C)
  958.       # 无任务可显示的话
  959.       if @task_names_window.task == nil
  960.         # 演奏冻结 SE
  961.         $game_system.se_play($data_system.buzzer_se)
  962.         return
  963.       end
  964.       # 如果光标没有移动的话,翻页
  965.       if $game_party.latest_task == @task_names_window.task.id
  966.         if @task_info_window.oy + @task_info_window.height - 32 > @task_info_window.contents.height
  967.           @task_info_window.oy = 0
  968.         else
  969.           @task_info_window.oy += 480-32
  970.         end
  971.         if @task_info_window.contents.height > @task_info_window.height - 32
  972.           # 演奏翻页 SE
  973.           Audio.se_play(CHANGE_PAGE_SE)
  974.         end
  975.       else
  976.         @task_info_window.refresh(@task_names_window.task.id)
  977.         $game_party.latest_task = @task_names_window.task.id
  978.         # 演奏确定 SE
  979.         $game_system.se_play($data_system.decision_se)
  980.       end
  981.     end
  982.   end
  983. end
复制代码
打开任务界面操作:先找到Scene_Menu脚本
然后增加一个选项D:\QQ截图2012.jpg
然后在38行(是我的38行,请看图)处加一个S(有几个选项就有几个S,例如s9是第9个选项,s10是第十个选项,应该明白吧?)(切记,加逗号隔开)
接着在此脚本在下面找到“when 1”“when2”之类的
加一个when(有几个选项就有几个when,由于0也算在内,所以when 7就是第8个选项所操作的内容,同理when 8 就是第9个选项所操作的内容)
看清楚,数字要对应(上面的s1=下面的when 0),否则可能会加错位置
D:\QQ截图20
最后在when的下一行填上$scene = Scene_Task.new
我的“Audio.se_play = "Audio/SE/菜单打开"”是多余的,这是播放音效se
不懂再问。


我说的是详细还是啰嗦?




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