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

Project1

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

帮忙把“详尽任务显示”脚本小小改动下

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
跳转到指定楼层
1
发表于 2009-5-4 00:14:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
今天使用了站上的“详尽任务显示”脚本! 很好很强大{/kuk}{/kuk}
但我想请教个问题:能不能让先接的任务放在任务栏的上面,后接的放在任务栏的下面??{/wx}{/wx}
试验了下原脚本,发现是先接的放下面,后接的放上面!{/fn}{/fn}
我那个郁闷啊 ,高手帮忙改东下啊!谢谢{/dy}{/dy}
脚本是这个:
  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[0]Enter&Space键

  113. \\c[6]呼出菜单/取消:
  114. \\c[0]Esc键

  115. \\c[6]菜单中切换角色:
  116. \\c[0]PageUp/PageDown键

  117. \\c[6]控制方向:
  118. \\c[0]方向键

  119. \\c[6]跑步:
  120. \\c[0]按住Space键

  121. \\c[6]显示地图缩略图(野外):
  122. \\c[0]Shift键"

  123.     #-讲解-
  124.     # 每个任务最后一定要加上:
  125.     # @tasks_info[任务ID] = Game_Task.new(名称, 简介)
  126.     # 接受任务和完成任务都是用这个任务ID来索引
  127.     #----
  128.     @tasks_info[0] = Game_Task.new(名称, 简介)
  129.    
  130.     #-----------------------------
  131.     # 示例任务2:密斯利尔王都简介
  132.     #-----------------------------
  133.     名称 = "\\c[6]密斯利尔王都简介"
  134.     #-讲解-
  135.     # 这里使用了字符串相加,例如 s = "a" + "b" ,s 就是 "ab"
  136.     # 还用了内嵌表达式,$game_party.item_number(38) 就是38号物品的数量
  137.     #----
  138.     简介 = "\\c[6]密斯利尔王都
  139. \\c[0]密斯利尔王都是密斯利尔大陆上最繁荣的都市,每年都会有许多人来这里观光,做生意。

  140. \\c[6]内部建筑:
  141. \\c[6]冒险者工会:
  142. \\c[0]接受任务,加属性点数。

  143. \\c[6]旅馆:
  144. \\c[0]回复体力,\\c[2]储存档案\\c[0]。

  145. \\c[6]武防店:
  146. \\c[0]购买武器防具,打造武器。

  147. \\c[6]道具店:
  148. \\c[0]购买物品,查询声望值、道德值。

  149. \\c[6]酒吧:
  150. \\c[0]招募伙伴,打听消息。

  151. \\c[6]银行:
  152. \\c[0]存放金钱,增加利息。

  153. \\c[2]图书馆:
  154. \\c[0]游戏信息,世界观简介。

  155. \\c[0]除此之外,密斯利尔王都还有许多不为人知的区域和秘密有待探索。"
  156.     @tasks_info[1] = Game_Task.new(名称, 简介)
  157.    
  158.     #-----------------------------
  159.     # 任务1:药草叶
  160.     #-----------------------------
  161.     #-讲解-
  162.     # 这里用了条件判断,当3号变量大于等于1时,加上“完成”字样,同时变色
  163.     #----
  164.     if $game_party.item_number(24) >= 3
  165.       名称 = "\\c[2]当前任务(完成)"
  166.       item = "\\c[2]药草叶:#{$game_party.item_number(24)}/3 (完成)"
  167.     else
  168.       名称 = "\\c[2]当前任务"
  169.       item = "\\c[2]药草叶:#{$game_party.item_number(24)}/3"
  170.     end
  171.     #-讲解-
  172.     # 预先定义变量,用内嵌表达式插入
  173.     # 最后用了显示图标
  174.     #----
  175.     简介 = "\\c[2]采药草
  176.    
  177. \\c[6]任务目标 \\c[0]采集3株药草叶。
  178.          #{item}

  179. \\c[6]任务地点 \\c[0]魔性森林

  180. \\c[6]任务报酬 \\c[0]声望值2点、金钱200G

  181. \\c[6]任务提示 \\c[0]在森林里遇见发光的草就是
  182.          可采集的药草了。

  183. \\c[6]契约金   \\c[0]金钱0G"
  184.     @tasks_info[2] = Game_Task.new(名称, 简介)
  185.    
  186.    
  187.     #-----------------------------
  188.     # 任务2:小猫
  189.     #-----------------------------

  190.     if $game_switches[43] == true
  191.       名称 = "\\c[2]当前任务(完成)"
  192.     else
  193.       名称 = "\\c[2]当前任务"
  194.     end

  195.     简介 = "\\c[2]米勒夫人的小猫
  196.    
  197. \\c[6]任务目标 \\c[0]找到米勒夫人走失的小猫

  198. \\c[6]任务地点 \\c[0]万兽沙漠

  199. \\c[6]任务报酬 \\c[0]声望值4点、金钱1000G

  200. \\c[6]任务提示 \\c[0]小猫在万兽沙漠里走失,仔
  201.          细找找吧。

  202. \\c[6]契约金   \\c[0]金钱500G"
  203.     @tasks_info[3] = Game_Task.new(名称, 简介)
  204.    
  205.    
  206.     #-----------------------------
  207.     # 任务3:火蜥蜴的繁殖季节
  208.     #-----------------------------

  209.     if $game_variables[21] >= 20
  210.       名称 = "\\c[2]当前任务(完成)"
  211.       kills = "消灭火蜥蜴数:#{$game_variables[21]}/20 (完成)"
  212.     else
  213.       名称 = "\\c[2]当前任务"
  214.       kills = "消灭火蜥蜴数:#{$game_variables[21]}/20"
  215.     end

  216.     简介 = "\\c[2]火蜥蜴的繁殖季节
  217.    
  218. \\c[6]任务目标 \\c[0]消灭20只火蜥蜴
  219.          #{kills}

  220. \\c[6]任务地点 \\c[0]红莲之窟

  221. \\c[6]任务报酬 \\c[0]声望值10点、金钱5000G

  222. \\c[6]任务提示 \\c[0]又到了火蜥蜴的繁殖季节,
  223.          如果不及时消灭一部分很可
  224.          能会威胁到王都。

  225. \\c[6]契约金   \\c[0]金钱2500G"
  226.     @tasks_info[4] = Game_Task.new(名称, 简介)
  227.    
  228.    
  229.     #-----------------------------
  230.     # 紧急任务:迷途的旅人
  231.     #-----------------------------

  232.     if $game_switches[46] == true
  233.       名称 = "\\c[2]紧急任务(完成)"
  234.     else
  235.       名称 = "\\c[2]紧急任务"
  236.     end

  237.     简介 = "\\c[2]迷途的商人
  238.    
  239. \\c[6]任务目标 \\c[0]找到迷路的商人

  240. \\c[6]任务地点 \\c[0]深蓝之廊

  241. \\c[6]任务报酬 \\c[0]声望值8点、金钱4000G

  242. \\c[6]任务提示 \\c[0]出去收集珍稀材料的商人却
  243.          迷了路,找到他,并把他带
  244.          回城吧。

  245. \\c[6]契约金   \\c[0]无"
  246.     @tasks_info[5] = Game_Task.new(名称, 简介)
  247.   end
  248. end
  249.    
  250. #==============================================================================
  251. # ■ Interpreter
  252. #------------------------------------------------------------------------------
  253. #  执行事件命令的解释器。本类在 Game_System 类
  254. # 与 Game_Event 类的内部使用。
  255. #==============================================================================

  256. class Interpreter
  257.   #--------------------------------------------------------------------------
  258.   # ● 接受任务
  259.   #--------------------------------------------------------------------------
  260.   def get_task(id)
  261.     task = $game_party.tasks_info[id]
  262.     return true if (task.nil? or $game_party.current_tasks.include?(task.id))
  263.     $game_party.current_tasks.unshift(task.id)
  264.     return true
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ● 获得全部任务
  268.   #--------------------------------------------------------------------------
  269.   def get_all_task
  270.     # 清空当前任务
  271.     $game_party.current_tasks.clear
  272.     for task in $game_party.tasks_info
  273.       next if task.nil?
  274.       $game_party.current_tasks.unshift(task.id)
  275.     end
  276.     return true
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ● 完成/放弃任务
  280.   #--------------------------------------------------------------------------
  281.   def finish_task(id)
  282.     task = $game_party.tasks_info[id]
  283.     return true if task.nil?
  284.     $game_party.current_tasks.delete(task.id)
  285.     return true
  286.   end
  287.   #--------------------------------------------------------------------------
  288.   # ● 删除全部任务
  289.   #--------------------------------------------------------------------------
  290.   def finish_all_task
  291.     $game_party.current_tasks.clear
  292.     return true
  293.   end
  294. end

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

  301. class Game_Party
  302.   #--------------------------------------------------------------------------
  303.   # ● 定义实例变量
  304.   #--------------------------------------------------------------------------
  305.   attr_writer     :latest_task                  # 上次查看的任务
  306.   #--------------------------------------------------------------------------
  307.   # ● 取得任务资料
  308.   #--------------------------------------------------------------------------
  309.   def tasks_info
  310.     if @tasks_info.nil?
  311.       get_tasks_info
  312.     end
  313.     return @tasks_info
  314.   end
  315.   #--------------------------------------------------------------------------
  316.   # ● 取得当前任务
  317.   #--------------------------------------------------------------------------
  318.   def current_tasks
  319.     if @current_tasks.nil?
  320.       @current_tasks = []
  321.     end
  322.     return @current_tasks
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # ● 上次查看的任务
  326.   #--------------------------------------------------------------------------
  327.   def latest_task
  328.     if !current_tasks.include?(@latest_task)
  329.       @latest_task = current_tasks[0]
  330.     end
  331.     return @latest_task
  332.   end
  333. end

  334. #==============================================================================
  335. # ■ Game_Task
  336. #------------------------------------------------------------------------------
  337. #  处理任务的类。包含任务的信息。
  338. #==============================================================================

  339. class Game_Task
  340.   attr_accessor   :name                   # 名称
  341.   attr_accessor   :briefing               # 简介
  342.   def initialize(name, briefing)
  343.     @name = name
  344.     @briefing = briefing
  345.   end
  346.   def height
  347.     text = @briefing.clone
  348.     x = 0
  349.     y = 64
  350.     min_y = 0
  351.     # 限制文字处理
  352.     begin
  353.       last_text = text.clone
  354.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  355.     end until text == last_text
  356.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  357.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  358.     end
  359.     # 为了方便、将 "\\\\" 变换为 "\000"
  360.     text.gsub!(/\\\\/) { "\000" }
  361.     # "\C" 变为 "\001"
  362.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  363.     # "\I" 变为 "\002"
  364.     text.gsub!(/\\[Ii]/) { "\002" }
  365.     # "\P" 变为 "\003"
  366.     text.gsub!(/\\[Pp]/) { "\003" }
  367.     # c 获取 1 个字 (如果不能取得文字就循环)
  368.     while ((c = text.slice!(/./m)) != nil)
  369.       # \\ 的情况下
  370.       if c == "\000"
  371.         # 还原为本来的文字
  372.         c = "\\"
  373.       end
  374.       # \C[n] 的情况下
  375.       if c == "\001"
  376.         # 更改文字色
  377.         text.sub!(/\[([0-9]+)\]/, "")
  378.         # 下面的文字
  379.         next
  380.       end
  381.       # 图标的情况下
  382.       if c == "\002"
  383.         icon_name = ''
  384.         while ((cha = text.slice!(/./m)) != ']')
  385.           next if cha == '['
  386.           icon_name += cha
  387.         end
  388.         icon = RPG::Cache.icon(icon_name)
  389.         if x + icon.width > 368
  390.           x = 0
  391.           y += [32, min_y].max
  392.           min_y = 0
  393.         end
  394.         x += 28
  395.         next
  396.       end
  397.       # 图片的情况下
  398.       if c == "\003"
  399.         pic_name = ''
  400.         while ((cha = text.slice!(/./m)) != ']')
  401.           next if cha == '['
  402.           pic_name += cha
  403.         end
  404.         pic = RPG::Cache.picture(pic_name)
  405.         if x + pic.width > 368
  406.           x = 0
  407.           y += [32, min_y].max
  408.           min_y = 0
  409.         end
  410.         x += pic.width
  411.         min_y = [pic.height, 32].max
  412.         next
  413.       end
  414.       # 另起一行文字的情况下
  415.       if c == "\n"
  416.         y += [32, min_y].max
  417.         min_y = 0
  418.         x = 0
  419.         # 下面的文字
  420.         next
  421.       end
  422.       # 自动换行处理
  423.       if x + 22 > 368
  424.         y += [32, min_y].max
  425.         min_y = 0
  426.         x = 0
  427.       end
  428.       # x 为要描绘文字的加法运算
  429.       x += 22
  430.     end
  431.     return (y + [32, min_y].max)
  432.   end
  433.   def id
  434.     return $game_party.tasks_info.index(self)
  435.   end
  436. end

  437. #==============================================================================
  438. # ■ Window_Task_Name
  439. #------------------------------------------------------------------------------
  440. #  任务名称显示窗口。
  441. #==============================================================================

  442. class Window_Task_Name < Window_Selectable
  443.   #--------------------------------------------------------------------------
  444.   # ● 初始化对像
  445.   #--------------------------------------------------------------------------
  446.   def initialize(tasks)
  447.     super(0, 0, 180, 480)
  448.     @tasks = []
  449.     for id in tasks
  450.       @tasks.push($game_party.tasks_info[id])
  451.     end
  452.     @item_max = tasks.size
  453.     self.contents = Bitmap.new(
  454.     self.width - 32, @item_max == 0 ? 32 : @item_max * 32)
  455.     refresh
  456.     self.index = 0
  457.   end
  458.   #--------------------------------------------------------------------------
  459.   # ● 刷新
  460.   #--------------------------------------------------------------------------
  461.   def refresh
  462.     self.contents.clear
  463.     if @tasks != []
  464.       for task in @tasks
  465.         draw_item(task)
  466.       end
  467.     else
  468.       draw_blank
  469.     end
  470.   end
  471.   #--------------------------------------------------------------------------
  472.   # ● 描绘项目
  473.   #--------------------------------------------------------------------------
  474.   def draw_item(task)
  475.     text = task.name.clone
  476.     x = 0
  477.     y = @tasks.index(task) * 32
  478.     # 限制文字处理
  479.     begin
  480.       last_text = text.clone
  481.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  482.     end until text == last_text
  483.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  484.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  485.     end
  486.     # 为了方便、将 "\\\\" 变换为 "\000"
  487.     text.gsub!(/\\\\/) { "\000" }
  488.     # "\\C" 变为 "\001"
  489.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  490.     # "\I" 变为 "\002"
  491.     text.gsub!(/\\[Ii]/) { "\002" }
  492.     # "\P" 变为 "\003"
  493.     text.gsub!(/\\[Pp]/) { "\003" }
  494.     # c 获取 1 个字 (如果不能取得文字就循环)
  495.     while ((c = text.slice!(/./m)) != nil)
  496.       # \\ 的情况下
  497.       if c == "\000"
  498.         # 还原为本来的文字
  499.         c = "\\"
  500.       end
  501.       # \C[n] 的情况下
  502.       if c == "\001"
  503.         # 更改文字色
  504.         text.sub!(/\[([0-9]+)\]/, "")
  505.         color = $1.to_i
  506.         if color >= 0 and color <= 7
  507.           self.contents.font.color = text_color(color)
  508.           self.contents.font.size =22
  509.         elsif color == 8
  510.           self.contents.font.color = disabled_color
  511.         elsif color == 9
  512.           self.contents.font.color = system_color
  513.         end
  514.         # 下面的文字
  515.         next
  516.       end
  517.       # 图标的情况下
  518.       if c == "\002"
  519.         icon_name = ''
  520.         while ((cha = text.slice!(/./m)) != ']')
  521.           next if cha == '['
  522.           icon_name += cha
  523.         end
  524.         icon = RPG::Cache.icon(icon_name)
  525.         if x + icon.width > self.contents.width
  526.           x = 0
  527.           y += [32, min_y].max
  528.           min_y = 0
  529.         end
  530.         self.contents.blt(x + 4, y + 4, icon, Rect.new(0, 0, 24, 24))
  531.         x += 28
  532.         next
  533.       end
  534.       # 图片的情况下
  535.       if c == "\003"
  536.         pic_name = ''
  537.         while ((cha = text.slice!(/./m)) != ']')
  538.           next if cha == '['
  539.           pic_name += cha
  540.         end
  541.         pic = RPG::Cache.picture(pic_name)
  542.         if x + pic.width > self.contents.width
  543.           x = 0
  544.           y += [32, min_y].max
  545.           min_y = 0
  546.         end
  547.         self.contents.blt(x + 4, y, pic, Rect.new(0, 0, pic.width, pic.height))
  548.         x += pic.width
  549.         next
  550.       end
  551.       # 描绘文字
  552.       self.contents.draw_text(4 + x, y, 40, 32, c)
  553.       # x 为要描绘文字的加法运算
  554.       x += self.contents.text_size(c).width
  555.     end
  556.   end
  557.   #--------------------------------------------------------------------------
  558.   # ● 描绘空行
  559.   #--------------------------------------------------------------------------
  560.   def draw_blank
  561.     self.contents.font.color = disabled_color
  562.     rect = Rect.new(4, 0, self.contents.width - 8, 32)
  563.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  564.     self.contents.draw_text(rect, '当前没有任何任务')
  565.   end
  566.   #--------------------------------------------------------------------------
  567.   # ● 获取任务
  568.   #--------------------------------------------------------------------------
  569.   def task
  570.     return @tasks[self.index]
  571.   end
  572. end
  573.   
  574. #==============================================================================
  575. # ■ Window_Task
  576. #------------------------------------------------------------------------------
  577. #  任务内容显示窗口。
  578. #==============================================================================

  579. class Window_Task < Window_Base
  580.   #--------------------------------------------------------------------------
  581.   # ● 初始化对像
  582.   #--------------------------------------------------------------------------
  583.   def initialize(task_id)
  584.     super(180, 0, 460, 480)
  585.     refresh(task_id)
  586.   end
  587.   #--------------------------------------------------------------------------
  588.   # ● 刷新内容
  589.   #--------------------------------------------------------------------------
  590.   def refresh(task_id)
  591.     self.oy = 0
  592.     self.visible = true
  593.     return if task_id.nil?
  594.     task = $game_party.tasks_info[task_id]
  595.     if !task.nil?
  596.       self.contents = Bitmap.new(self.width - 32, task.height)
  597.     else
  598.       self.contents = Bitmap.new(self.width - 32, self.height - 32)
  599.       return
  600.     end
  601.     self.contents.font.color = normal_color
  602.     # 描绘任务内容
  603.     draw_task_info(task)
  604.   end
  605.   #--------------------------------------------------------------------------
  606.   # ● 描绘任务内容
  607.   #--------------------------------------------------------------------------
  608.   def draw_task_info(task)
  609.     # 记录文字x坐标
  610.     x = 0
  611.     # 记录文字y坐标
  612.     y = 0
  613.     # 记录换行时y坐标最小加值
  614.     min_y = 0
  615.     self.contents.font.color = normal_color
  616.     # 描绘任务简介
  617.     text = task.briefing.clone
  618.     # 限制文字处理
  619.     begin
  620.       last_text = text.clone
  621.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  622.     end until text == last_text
  623.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  624.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  625.     end
  626.     # 为了方便、将 "\\\\" 变换为 "\000"
  627.     text.gsub!(/\\\\/) { "\000" }
  628.     # "\C" 变为 "\001"
  629.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  630.     # "\I" 变为 "\002"
  631.     text.gsub!(/\\[Ii]/) { "\002" }
  632.     # "\P" 变为 "\003"
  633.     text.gsub!(/\\[Pp]/) { "\003" }
  634.     # c 获取 1 个字 (如果不能取得文字就循环)
  635.     while ((c = text.slice!(/./m)) != nil)
  636.       # \\ 的情况下
  637.       if c == "\000"
  638.         # 还原为本来的文字
  639.         c = "\\"
  640.       end
  641.       # \C[n] 的情况下
  642.       if c == "\001"
  643.         # 更改文字色
  644.         text.sub!(/\[([0-9]+)\]/, "")
  645.         color = $1.to_i
  646.         if color >= 0 and color <= 2
  647.           self.contents.font.color = text_color(color)
  648.           self.contents.font.size =24
  649.           elsif color ==3
  650.           self.contents.font.color = text_color(color)
  651.           self.contents.font.size =30
  652.           elsif color >= 4 and color <= 7
  653.           self.contents.font.color = text_color(color)
  654.           self.contents.font.size =24
  655.         elsif color == 8
  656.           self.contents.font.color = disabled_color
  657.         elsif color == 9
  658.           self.contents.font.color = system_color
  659.         end
  660.         # 下面的文字
  661.         next
  662.       end
  663.       # 图标的情况下
  664.       if c == "\002"
  665.         icon_name = ''
  666.         while ((cha = text.slice!(/./m)) != ']')
  667.           next if cha == '['
  668.           icon_name += cha
  669.         end
  670.         icon = RPG::Cache.icon(icon_name)
  671.         if x + icon.width > self.contents.width
  672.           x = 0
  673.           y += [32, min_y].max
  674.           min_y = 0
  675.         end
  676.         self.contents.blt(x + 4, y + 4, icon, Rect.new(0, 0, 24, 24))
  677.         x += 28
  678.         next
  679.       end
  680.       # 图片的情况下
  681.       if c == "\003"
  682.         pic_name = ''
  683.         while ((cha = text.slice!(/./m)) != ']')
  684.           next if cha == '['
  685.           pic_name += cha
  686.         end
  687.         pic = RPG::Cache.picture(pic_name)
  688.         if x + pic.width > self.contents.width
  689.           x = 0
  690.           y += [32, min_y].max
  691.           min_y = 0
  692.         end
  693.         self.contents.blt(x + 4, y, pic, Rect.new(0, 0, pic.width, pic.height))
  694.         x += pic.width
  695.         min_y = [pic.height, 32].max
  696.         next
  697.       end
  698.       # 另起一行文字的情况下
  699.       if c == "\n"
  700.         y += [32, min_y].max
  701.         min_y = 0
  702.         x = 0
  703.         # 下面的文字
  704.         next
  705.       end
  706.       # 自动换行处理
  707.       if x + self.contents.text_size(c).width > self.contents.width
  708.         y += [32, min_y].max
  709.         min_y = 0
  710.         x = 0
  711.       end
  712.       # 描绘文字
  713.       self.contents.draw_text(4 + x, y, 40, 32, c)
  714.       # x 为要描绘文字的加法运算
  715.       x += self.contents.text_size(c).width
  716.     end
  717.   end
  718. end

  719. #==============================================================================
  720. # ■ Scene_Task
  721. #------------------------------------------------------------------------------
  722. #  处理任务画面的类。
  723. #==============================================================================

  724. class Scene_Task
  725.   #--------------------------------------------------------------------------
  726.   # ● 主处理
  727.   #--------------------------------------------------------------------------
  728.   def main
  729.     # 刷新任务资料
  730.     $game_party.get_tasks_info
  731.     # 生成任务名称窗口
  732.     @task_names_window = Window_Task_Name.new($game_party.current_tasks)
  733.     @task_names_window.active = true
  734.     if $game_party.current_tasks != []
  735.       @task_names_window.index = $game_party.current_tasks.index($game_party.latest_task)
  736.     end
  737.     # 生成任务内容窗口
  738.     @task_info_window = Window_Task.new($game_party.latest_task)
  739.     @task_info_window.active = true
  740.     # 执行过渡
  741.     Graphics.transition
  742.     # 主循环
  743.     loop do
  744.       # 刷新游戏画面
  745.       Graphics.update
  746.       # 刷新输入信息
  747.       Input.update
  748.       # 刷新画面
  749.       update
  750.       # 如果画面被切换的话就中断循环
  751.       if $scene != self
  752.         break
  753.       end
  754.     end
  755.     # 准备过渡
  756.     Graphics.freeze
  757.     # 释放窗口
  758.     @task_names_window.dispose
  759.     @task_info_window.dispose
  760.   end
  761.   #--------------------------------------------------------------------------
  762.   # ● 刷新画面
  763.   #--------------------------------------------------------------------------
  764.   def update
  765.     # 刷新窗口
  766.     @task_names_window.update
  767.     @task_info_window.update
  768.     update_task_names_window
  769.   end
  770.   #--------------------------------------------------------------------------
  771.   # ● 刷新任务名称窗口
  772.   #--------------------------------------------------------------------------
  773.   def update_task_names_window
  774.     # 按下 B 键的情况下
  775.     if Input.trigger?(Input::B)
  776.       # 演奏取消 SE
  777.       $game_system.se_play($data_system.cancel_se)
  778.       # 这里设置返回的场景,返回地图是Scene_Map.new,菜单是Scene_Menu.new(任务界面index)
  779.       $scene = Scene_Menu.new(9)
  780.       return
  781.     end
  782.     # 按下 C 键的情况下
  783.     if Input.trigger?(Input::C)
  784.       # 无任务可显示的话
  785.       if @task_names_window.task == nil
  786.         # 演奏冻结 SE
  787.         $game_system.se_play($data_system.buzzer_se)
  788.         return
  789.       end
  790.       # 如果光标没有移动的话,翻页
  791.       if $game_party.latest_task == @task_names_window.task.id
  792.         if @task_info_window.oy + @task_info_window.height - 32 > @task_info_window.contents.height
  793.           @task_info_window.oy = 0
  794.         else
  795.           @task_info_window.oy += 480-32
  796.         end
  797.         if @task_info_window.contents.height > @task_info_window.height - 32
  798.           # 演奏翻页 SE
  799.           Audio.se_play(CHANGE_PAGE_SE)
  800.         end
  801.       else
  802.         @task_info_window.refresh(@task_names_window.task.id)
  803.         $game_party.latest_task = @task_names_window.task.id
  804.         # 演奏确定 SE
  805.         $game_system.se_play($data_system.decision_se)
  806.       end
  807.     end
  808.   end
  809. end
复制代码

版务信息:本贴由楼主自主结贴~
做一个游戏也用这么长时间........
PS:说我自己呢

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
2
 楼主| 发表于 2009-5-4 00:39:52 | 只看该作者
没人会吗?{/ll} 估计太难了{/kuk}{/kuk}
版主对此帖的评论:『3小时内不允许自顶。』,积分『-50』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
做一个游戏也用这么长时间........
PS:说我自己呢
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
727
在线时间
376 小时
注册时间
2009-3-9
帖子
398
3
发表于 2009-5-4 02:24:08 | 只看该作者
我也是这个问题,有人解决了真是求之不得啊!{/gg} 算啦,我看你还是将就着用吧!{/tp}
新手学习中.....努力吧!!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
4
 楼主| 发表于 2009-5-4 20:44:42 | 只看该作者
晕死 一天了 还没有人回答。。估计太难了{/gg}{/gg}{/gg}
做一个游戏也用这么长时间........
PS:说我自己呢
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
5
发表于 2009-5-4 21:11:48 | 只看该作者
何必呢,还用激将法
这个问题半点不难,只需要改一行:
  def get_task(id)
    task = $game_party.tasks_info[id]
    return true if (task.nil? or $game_party.current_tasks.include?(task.id))
    #$game_party.current_tasks.unshift(task.id)
    $game_party.current_tasks.push(task.id)

    return true
  end

以前是在数组开头添加元素,所以后接的任务反而在前面(后进先出),把 unshift 改为 push 即可,效率还比 unshift 高些~
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
6
 楼主| 发表于 2009-5-4 21:29:51 | 只看该作者
以下引用紫苏于2009-5-4 13:11:48的发言:

何必呢,还用激将法
这个问题半点不难,只需要改一行:
def get_task(id)
   task = $game_party.tasks_info[id]
   return true if (task.nil? or $game_party.current_tasks.include?(task.id))
   #$game_party.current_tasks.unshift(task.id)
   $game_party.current_tasks.push(task.id)
   return true
end

以前是在数组开头添加元素,所以后接的任务反而在前面(后进先出),把 unshift 改为 push 即可,效率还比 unshift 高些~


[本贴由作者于 2009-5-4 13:15:40 最后编辑]

我。。。。。。。。我万分敬佩阁下! 我从昨天开始试验着改了这个问题!知道是改这个地方!可就是不知道怎么改...哎  语法问题啊! 谢谢了!
{/cy}{/cy}{/cy}
做一个游戏也用这么长时间........
PS:说我自己呢
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-15 20:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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