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

Project1

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

[已经解决] 求修复va任务系统的BUG

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
646 小时
注册时间
2011-6-23
帖子
249
跳转到指定楼层
1
发表于 2015-2-10 18:19:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 只是逛逛 于 2015-2-10 18:19 编辑

找到了一个任务系统,感觉挺好使的说~
但是!
BUG1!:

目前看起来还不错

一旦任务数超过14个,就会变得很鬼畜,超出的任务名无法显示↑

但只要完成一些任务,使任务数不大于14,就又能正常显示了  (简直了

但是同理,一旦“已完成任务”数超过14,又鬼畜了TAT

BUG2!:

在“已完成任务”中随便选一个
按Esc
再选择“未完成任务”

就会这样↑
反过来,在“未完成任务”中随便选一个,按Esc,再选择“已完成任务”,也会这样

源码:
RUBY 代码复制
  1. #用法:
  2. #领取任务:$game_party.get_task(任意数字,任务名称,任务描述)
  3. #完成任务:$game_party.finish_task(领取任务时设定的数字)
  4. #如:前面有事件$game_party.get_task(1,"测试","只是测试")
  5. #后面完成任务的脚本就是$game_party.finish_task(1)
  6.  
  7. #召唤任务界面:SceneManager.call(Scene_Task)
  8.  
  9.  
  10.  
  11. #========================================================
  12. # * 本体
  13. #========================================================
  14. class Task
  15.   attr_reader :desc
  16.   attr_reader :finished
  17.   def initialize(origin_name,desc)
  18.     @origin_name = origin_name
  19.     @desc = desc
  20.     @finished = false
  21.   end
  22.   def name
  23.     if @finished
  24.       return @origin_name + "(完成)"
  25.     else
  26.       return @origin_name
  27.     end
  28.   end
  29.   def finish
  30.     @finished = true
  31.   end
  32.  
  33. end
  34.  
  35. class Game_Party < Game_Unit
  36.   alias old_init initialize
  37.   def initialize
  38.     old_init
  39.     @tasks = {}
  40.   end
  41.   def get_task(i,name,desc)
  42.     @tasks[i]=Task.new(name,desc)
  43.   end
  44.   def have_task?(i)
  45.     @tasks[i] != nil
  46.   end
  47.   def finish_task(i)
  48.     @tasks[i].finish if have_task?(i)
  49.   end
  50.   def unfinished_tasks
  51.     n = []
  52.     for i in @tasks.values
  53.       next if i.finished
  54.       n.push(i)
  55.     end
  56.     return n
  57.   end
  58.   def finished_tasks
  59.     n = []
  60.     for i in @tasks.values
  61.       next unless i.finished
  62.       n.push(i)
  63.     end
  64.     return n
  65.   end
  66. end
  67.  
  68. #========================================================
  69. # * 任务界面最上面的横向选项区域
  70. #========================================================
  71. class Window_Task_Type < Window_HorzCommand
  72.   #--------------------------------------------------------------------------
  73.   # ● 对象初期化
  74.   #--------------------------------------------------------------------------
  75.   def initialize
  76.     super(0, 0)
  77.     activate
  78.   end
  79.   def window_width
  80.     return Graphics.width
  81.   end
  82.   def col_max
  83.     return 3
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 生成指令
  87.   #--------------------------------------------------------------------------
  88.   def make_command_list
  89.     add_command("未完成任务",  :unfinished_task)
  90.     add_command("已完成任务", :finished_task)
  91.     add_command("取消", :cancel)
  92.   end
  93. end
  94.  
  95. #========================================================
  96. # * 任务界面左边的纵向选项区域
  97. #========================================================
  98. class Window_TaskLeft < Window_Selectable
  99.   attr_reader :finished
  100.   def initialize
  101.     super(0,48,200,Graphics.height - 48)
  102.     create_contents
  103.     @finished = false
  104.     @index = 0
  105.     refresh
  106.     deactivate
  107.   end
  108.   def set_finish(finish)
  109.     @finished = finish
  110.     set_item_max
  111.   end
  112.   def item_max
  113.     return @item_max != nil ? @item_max : 0
  114.   end
  115.   def set_item_max
  116.     if @finished
  117.       @item_max = $game_party.finished_tasks.size
  118.     else
  119.       @item_max = $game_party.unfinished_tasks.size
  120.     end
  121.   end
  122.  
  123.   def refresh
  124.     set_item_max
  125.     super
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ● 描绘项目
  129.   #--------------------------------------------------------------------------
  130.   def draw_item(index)
  131.     text = ""
  132.     unless @finished
  133.       if $game_party.unfinished_tasks[index] != nil
  134.         text = $game_party.unfinished_tasks[index].name
  135.       end
  136.     else
  137.       if $game_party.finished_tasks[index] != nil
  138.         text = $game_party.finished_tasks[index].name  
  139.       end
  140.     end
  141.     draw_text(item_rect_for_text(index), text)
  142.   end
  143.  
  144. end
  145.  
  146. #========================================================
  147. # * 任务界面右边的任务描述区域
  148. #========================================================
  149. class Window_TaskRight < Window_Base
  150.   attr_reader :left_index
  151.   def initialize
  152.     super(200,48,Graphics.width - 200,Graphics.height - 48)
  153.     create_contents
  154.     @left_index = 0
  155.     @finished = false
  156.     refresh
  157.   end
  158.   def set_index(i)
  159.     @left_index = i
  160.     refresh
  161.   end
  162.   def set_finish(i)
  163.     @finished = i
  164.   end
  165.  
  166.   def refresh
  167.     contents.clear
  168.     draw_desc
  169.   end
  170.   def draw_desc
  171.     if @finished
  172.       if $game_party.finished_tasks[@left_index] != nil
  173.         draw_text_ex(0,0,$game_party.finished_tasks[@left_index].desc)
  174.       end
  175.     else
  176.       if $game_party.unfinished_tasks[@left_index] != nil
  177.         draw_text_ex(0,0,$game_party.unfinished_tasks[@left_index].desc)
  178.       end
  179.     end
  180.   end
  181.  
  182. end
  183.  
  184. #========================================================
  185. # * 完全看不懂在说什么
  186. #========================================================
  187. class Scene_Task < Scene_Base
  188.   def start
  189.     super
  190.     create_task_type_window
  191.     create_left_window
  192.     create_right_window
  193.   end
  194.   def update
  195.     super
  196.     if @left_window.active
  197.       if Input.trigger?(:B)
  198.         @left_window.deactivate
  199.         @task_type_window.activate
  200.       end
  201.       if Input.trigger?(:UP) || Input.trigger?(:DOWN)
  202.         @right_window.set_finish(@left_window.finished)
  203.         @right_window.set_index(@left_window.index)
  204.       end
  205.     end
  206.   end
  207.  
  208.   def terminate
  209.     super
  210.   end
  211.   def create_task_type_window
  212.     @task_type_window = Window_Task_Type.new
  213.     @task_type_window.set_handler(:unfinished_task,method(:view_unfinished_task))
  214.     @task_type_window.set_handler(:finished_task,method(:view_finished_task))
  215.     @task_type_window.set_handler(:cancel,method(:return_scene))
  216.   end
  217.   def create_left_window
  218.     @left_window = Window_TaskLeft.new
  219.     @left_window.set_finish(false)
  220.     @left_window.refresh
  221.   end
  222.   def create_right_window
  223.     @right_window = Window_TaskRight.new
  224.     @right_window.refresh
  225.   end
  226.   def view_unfinished_task
  227.     @left_window.set_finish(false)
  228.     @left_window.refresh
  229.     @left_window.activate
  230.     @task_type_window.deactivate
  231.     @right_window.set_finish(false)
  232.     @right_window.set_index(@left_window.index)
  233.   end
  234.   def view_finished_task
  235.     @left_window.set_finish(true)
  236.     @left_window.refresh
  237.     @left_window.activate
  238.     @task_type_window.deactivate
  239.     @right_window.set_finish(true)
  240.     @right_window.set_index(@left_window.index)
  241.   end
  242.  
  243. end
  244.  
  245. #========================================================
  246. # * 在菜单里加入“任务”选项
  247. #========================================================
  248. class Window_MenuCommand < Window_Command
  249.   alias add_original_commands_task_zabing add_original_commands
  250.   def add_original_commands
  251.     add_original_commands_task_zabing
  252.     add_command("任务", :maphint)
  253.   end
  254. end
  255. class Scene_Menu < Scene_MenuBase
  256.   alias create_command_window_task_zabing create_command_window
  257.   def create_command_window
  258.     create_command_window_task_zabing
  259.     @command_window.set_handler(:maphint,   method(:command_maphint))
  260.   end
  261.   def command_maphint
  262.     SceneManager.call(Scene_Task)
  263.   end
  264. end


我无耻地@ 了一下 @喵呜喵5  

点评

嘛,不知为何有一种微妙的感觉……  发表于 2015-2-10 22:23
艾特我做甚,闲着没事时我会回答,想摸鱼时指名道姓艾特我回答问题收费……  发表于 2015-2-10 21:31
请叫我RC君
某些过于XX的内容会用白字,所以请多多使用ctrl+a

Lv3.寻梦者

梦石
0
星屑
3228
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
2
发表于 2015-2-11 10:24:45 | 只看该作者
本帖最后由 tan12345 于 2015-2-11 10:36 编辑

bug2的解决方法:找到def view_unfinished_task和def view_finished_task,在这2个方法的@left_window.set_finish(false)、@left_window.set_finish(true)后面加一句@left_window.select(0)试试
至于bug1,我不知道怎么说才好……

评分

参与人数 2星屑 +15 梦石 +1 收起 理由
taroxd + 1 认可答案
只是逛逛 + 15 感谢哟~BUG2已经完美解除

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv2.观梦者

梦石
0
星屑
852
在线时间
231 小时
注册时间
2013-10-30
帖子
159
3
发表于 2015-3-20 01:44:21 | 只看该作者
LZ 求教你问题1解决了么?我也用的这任务系统。。不过任务还没做到这么多。 现在换任务系统太复杂了。。
所以同求教这个问题。。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
852
在线时间
231 小时
注册时间
2013-10-30
帖子
159
4
发表于 2015-3-20 14:57:29 | 只看该作者
本帖最后由 m328759997 于 2015-3-20 22:25 编辑


大神  问题没解决啊。。
@taroxd
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
126 小时
注册时间
2015-6-26
帖子
105
5
发表于 2015-7-18 17:17:51 | 只看该作者
@tan12345 话说BUG1到底怎么办。。。。。。

评分

参与人数 1星屑 -1 收起 理由
taroxd -1 请不要挖坟,如有问题可以重新提问.

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-25 07:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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