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

Project1

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

[已经解决] 任务系统无限弹错啊啊啊啊啊!!!!!

[复制链接]

Lv1.梦旅人

梦石
0
星屑
77
在线时间
61 小时
注册时间
2014-11-1
帖子
48
跳转到指定楼层
1
发表于 2015-2-4 02:02:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
从论坛找了某大大的任务系统
然后对任务框的构造不是很满意 于是决定学着看脚本   从零基础开始看了4小时 总算找到了改变三个窗口的大概  对数据的修改一直木有弹错很激动! 直到我添加了366-373的代码.....
这段代码导致的后果就是  如果364行的create_help_window呆在那 就能达到我想要的最终效果 但它却失去了本来的任务提示的功能 只是一个空白的框体
如果我把它移回原本的362行   就会弹错... 删掉366-373  就能恢复任务提示功能  但是提示框只能置顶跟其他框重合  我要疯掉了啊啊啊 卡在这个代码3个多小时了...


RUBY 代码复制
  1. #encoding:utf-8
  2.  
  3. #==============================================================================
  4. # ■ Task
  5. #------------------------------------------------------------------------------
  6. #  任务类。本类在 Game_Task 类的内部使用。
  7. #   任务属性:名称,内容,是否是主线任务,是否有父任务
  8. #==============================================================================
  9.  
  10. class Task
  11.   attr_reader :index
  12.   attr_reader :name
  13.   attr_reader :description
  14.   attr_reader :type
  15.   attr_reader :father_task
  16.   attr_reader :finished
  17.   #--------------------------------------------------------------------------
  18.   # ● 初始化对象
  19.   #--------------------------------------------------------------------------
  20.   def initialize(index, name, description, type = true, father_task = -1)
  21.     @type = type
  22.     @name = name
  23.     @description = description
  24.     @father_task = father_task
  25.     @index = index
  26.     @finished = false
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ● 是否是主线任务
  30.   #--------------------------------------------------------------------------
  31.   def key_task?
  32.     @type
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # ● 是否是子任务
  36.   #--------------------------------------------------------------------------
  37.   def has_father_task?
  38.     @father_task > -1
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 完成任务
  42.   #--------------------------------------------------------------------------
  43.   def finish
  44.     @finished = true
  45.   end
  46.  
  47. end
  48.  
  49. #==============================================================================
  50. # ■ Game_Party
  51. #==============================================================================
  52.  
  53. class Game_Party < Game_Unit
  54.   #--------------------------------------------------------------------------
  55.   # ● 初始化对象
  56.   #--------------------------------------------------------------------------
  57.   alias old_init initialize
  58.   def initialize
  59.     old_init
  60.     @tasks = {}
  61.     @sub_tasks= {}
  62.     #定义了一个任务列表,提前把所有的任务都写进去了
  63.     @task_list=TaskList.new
  64.     @sub = false
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ● 是否存在子任务
  68.   #--------------------------------------------------------------------------
  69.   def is_sub
  70.     @sub
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ● 启用子任务
  74.   #--------------------------------------------------------------------------
  75.   def set_sub
  76.     @sub = true
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● 添加新的任务
  80.   #--------------------------------------------------------------------------
  81.   def new_task(i, name, desc, type, father_task = -1)
  82.     if !is_sub
  83.       @tasks[i] = tmp if !have_task?(i)
  84.       return
  85.     end
  86.     tmp = Task.new(i, name, desc, type, father_task)
  87.     if father_task < 0
  88.       @tasks[i] = tmp if !have_task?(i)
  89.     else
  90.       @sub_tasks[i] = tmp if father_task?(father_task) && !sub_task?(i)
  91.     end   
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 从已定义好的任务列表中添加新的任务
  95.   #--------------------------------------------------------------------------
  96.   def set_task(index)
  97.     temp = @task_list.get_task(index)
  98.     if !is_sub
  99.       @tasks[index] = temp if !have_task?(index)
  100.       return
  101.     end
  102.     if temp.has_father_task?
  103.       @sub_tasks[index] = temp if father_task?(temp.father_task) && !sub_task?(index)
  104.     else
  105.       @tasks[index] = temp if !have_task?(index)
  106.     end
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 查询任务是否存在
  110.   #--------------------------------------------------------------------------
  111.   def have_task?(i)
  112.     return father_task?(i) || sub_task?(i)
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 查询父任务是否存在
  116.   #--------------------------------------------------------------------------
  117.   def father_task?(i)
  118.     @tasks[i] != nil
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ● 查询子任务是否存在
  122.   #--------------------------------------------------------------------------
  123.   def sub_task?(i)
  124.     @sub_tasks[i] != nil
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ● 完成已有的任务,如果该任务有没有完成的子任务,则不能完成
  128.   #--------------------------------------------------------------------------
  129.   def finish_task(i)
  130.     @tasks[i].finish if father_task?(i) && sub_tasks_finished?(i)
  131.     @sub_tasks[i].finish if sub_task?(i)
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● 查询父任务序号为i的子任务,返回一个数组
  135.   #--------------------------------------------------------------------------
  136.   def get_sub_tasks(i)
  137.     return [] if !is_sub
  138.     tmp = []
  139.     for j in @sub_tasks.values
  140.       next if j.father_task != i
  141.       tmp.push(j)
  142.     end
  143.     return tmp
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   # ● 查询父任务序号为i的子任务是否都已完成
  147.   #--------------------------------------------------------------------------
  148.   def sub_tasks_finished?(i)
  149.     return true if !is_sub
  150.     for j in @sub_tasks.values
  151.       next if j.father_task != i
  152.       return false if !j.finished
  153.     end
  154.     return true
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● 获取任务类型为cat的任务集合
  158.   #--------------------------------------------------------------------------
  159.   def all_tasks(cat)
  160.     n = []
  161.     m = []
  162.     for i in @tasks.values
  163.       next if i.key_task? != cat
  164.       tmp = get_sub_tasks(i.index)
  165.       if i.finished
  166.         n.push(i)
  167.         n += tmp
  168.       else
  169.         m.push(i)
  170.         m += tmp
  171.       end
  172.     end
  173.     return m + n
  174.   end
  175.  
  176. end
  177.  
  178. #==============================================================================
  179. # ■ Window_TaskList
  180. #------------------------------------------------------------------------------
  181. #  任务画面中,显示已获得任务的窗口。
  182. #==============================================================================
  183.  
  184. class Window_TaskList < Window_Selectable
  185.   #--------------------------------------------------------------------------
  186.   # ● 初始化对象
  187.   #--------------------------------------------------------------------------
  188.   def initialize(x, y, width, height)
  189.     super
  190.     @category = :none
  191.     @data = []
  192.     @sub_task = false
  193.   end
  194.   #--------------------------------------------------------------------------
  195.   # ● 设置是否有子任务
  196.   #--------------------------------------------------------------------------
  197.   def has_sub_task
  198.     @sub_task = true
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   # ● 设置分类
  202.   #--------------------------------------------------------------------------
  203.   def category=(category)
  204.     return if @category == category
  205.     @category = category
  206.     if category == :true
  207.       refresh(true)
  208.     else
  209.       refresh(false)
  210.     end
  211.     self.oy = 0
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # ● 获取列数
  215.   #--------------------------------------------------------------------------
  216.   def col_max
  217.     if @sub_task
  218.       return 1
  219.     else
  220.       return 2
  221.     end
  222.   end
  223.   #--------------------------------------------------------------------------
  224.   # ● 获取项目数
  225.   #--------------------------------------------------------------------------
  226.   def item_max
  227.     @data ? @data.size : 1
  228.   end
  229.   #--------------------------------------------------------------------------
  230.   # ● 获取任务
  231.   #--------------------------------------------------------------------------
  232.   def item
  233.     @data && index >= 0 ? @data[index] : nil
  234.   end
  235.   #--------------------------------------------------------------------------
  236.   # ● 获取选择任务的有效状态
  237.   #--------------------------------------------------------------------------
  238.   def current_item_enabled?
  239.     enable?(@data[index])
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ● 查询此任务是否完成
  243.   #--------------------------------------------------------------------------
  244.   def enable?(item)
  245.     !item.finished
  246.   end
  247.   #--------------------------------------------------------------------------
  248.   # ● 生成任务列表
  249.   #--------------------------------------------------------------------------
  250.   def make_item_list(type)
  251.     @data = $game_party.all_tasks(type)
  252.   end
  253.   #--------------------------------------------------------------------------
  254.   # ● 返回上一个选择的位置
  255.   #--------------------------------------------------------------------------
  256.   def select_last
  257.     select(0)
  258.   end
  259.   #--------------------------------------------------------------------------
  260.   # ● 绘制项目
  261.   #--------------------------------------------------------------------------
  262.   def draw_item(index)
  263.     item = @data[index]
  264.     if item
  265.       rect = item_rect(index)
  266.       rect.width -= 4
  267.       draw_item_name(item, rect.x, rect.y, enable?(item))
  268.     end
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   # ● 绘制名称
  272.   #     enabled : 有效的标志。false 的时候使用半透明效果绘制
  273.   #--------------------------------------------------------------------------
  274.   def draw_item_name(item, x, y, enabled = true, width = 172)
  275.     return unless item
  276.     text = item.name
  277.     text = "    " + text if @sub_task && item.has_father_task?
  278.     text += "(已完成)" if item.finished
  279.     change_color(normal_color, enabled)
  280.     draw_text(x, y, width, line_height, text)
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ● 更新帮助内容
  284.   #--------------------------------------------------------------------------
  285.   def update_help
  286.     @help_window.set_item(item)
  287.   end
  288.   #--------------------------------------------------------------------------
  289.   # ● 刷新
  290.   #--------------------------------------------------------------------------
  291.   def refresh(type)
  292.     make_item_list(type)
  293.     create_contents
  294.     draw_all_items
  295.   end
  296. end
  297.  
  298. #==============================================================================
  299. # ■ Window_TaskCategory
  300. #------------------------------------------------------------------------------
  301. #  任务画面中,显示任务列表的窗口。
  302. #==============================================================================
  303.  
  304. class Window_TaskCategory < Window_HorzCommand
  305.   #--------------------------------------------------------------------------
  306.   # ● 定义实例变量
  307.   #--------------------------------------------------------------------------
  308.   attr_reader   :item_window
  309.   #--------------------------------------------------------------------------
  310.   # ● 初始化对象
  311.   #--------------------------------------------------------------------------
  312.   def initialize
  313.     super(0, 0)
  314.   end
  315.   #--------------------------------------------------------------------------
  316.   # ● 获取窗口的宽度
  317.   #--------------------------------------------------------------------------
  318.   def window_width
  319.     Graphics.width
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   # ● 获取列数
  323.   #--------------------------------------------------------------------------
  324.   def col_max
  325.     return 2
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ● 更新画面
  329.   #--------------------------------------------------------------------------
  330.   def update
  331.     super
  332.     @item_window.category = current_symbol if @item_window
  333.   end
  334.   #--------------------------------------------------------------------------
  335.   # ● 生成指令列表
  336.   #--------------------------------------------------------------------------
  337.   def make_command_list
  338.     add_command("主线任务",   :true)
  339.     add_command("支线任务",   :false)
  340.   end
  341.   #--------------------------------------------------------------------------
  342.   # ● 设置任务窗口
  343.   #--------------------------------------------------------------------------
  344.   def item_window=(item_window)
  345.     @item_window = item_window
  346.     update
  347.   end
  348. end
  349.  
  350. #==============================================================================
  351. # ■ Scene_Task
  352. #------------------------------------------------------------------------------
  353. #  任务画面
  354. #==============================================================================
  355.  
  356. class Scene_Task < Scene_ItemBase
  357.   #--------------------------------------------------------------------------
  358.   # ● 开始处理
  359.   #--------------------------------------------------------------------------
  360.   def start
  361.     super
  362.     create_category_window
  363.     create_task_window
  364.     create_help_window
  365.   end
  366.   #--------------------------------------------------------------------------
  367.   # ● 生成任务帮助窗口
  368.   #--------------------------------------------------------------------------
  369.   def create_help_window
  370.      wy = @category_window.y + @category_window.height
  371.      wh = Graphics.height - wy
  372.      @help_window = Window_TaskList.new(Graphics.width/3, wy, Graphics.width - Graphics.width/3, wh)
  373.   end
  374.   #--------------------------------------------------------------------------
  375.   # ● 生成分类窗口
  376.   #--------------------------------------------------------------------------
  377.   def create_category_window
  378.     @category_window = Window_TaskCategory.new
  379.     @category_window.viewport = @viewport
  380.     @category_window.help_window = @help_window
  381.     @category_window.y = 0
  382.     @category_window.set_handler(:ok,     method(:on_category_ok))
  383.     @category_window.set_handler(:cancel, method(:return_scene))
  384.   end
  385.   #--------------------------------------------------------------------------
  386.   # ● 生成任务窗口
  387.   #--------------------------------------------------------------------------
  388.   def create_task_window
  389.     wy = @category_window.y + @category_window.height
  390.     wh = Graphics.height - wy
  391.     @item_window = Window_TaskList.new(0, wy, Graphics.width/3, wh)
  392.     #如果允许子任务则显示子任务
  393.     @item_window.has_sub_task if $game_party.is_sub
  394.     @item_window.viewport = @viewport
  395.     @item_window.help_window = @help_window
  396.     @item_window.set_handler(:cancel, method(:on_item_cancel))
  397.     @category_window.item_window = @item_window
  398.   end
  399.   #--------------------------------------------------------------------------
  400.   # ● 分类“确定”
  401.   #--------------------------------------------------------------------------
  402.   def on_category_ok
  403.     @item_window.activate
  404.     @item_window.select_last
  405.   end
  406.   #--------------------------------------------------------------------------
  407.   # ● 任务“取消”
  408.   #--------------------------------------------------------------------------
  409.   def on_item_cancel
  410.     @item_window.unselect
  411.     @category_window.activate
  412.   end
  413. end
  414.  
  415. #==============================================================================
  416. # ■ TaskList
  417. #------------------------------------------------------------------------------
  418. #  
  419. #==============================================================================
  420. class TaskList
  421.   def initialize
  422.     #允许子任务
  423.     @list = []
  424.     @list.push(Task.new(0, "主线任务1", "暂无描述"))
  425.     @list.push(Task.new(1, "主线任务2", "暂无描述"))
  426.     @list.push(Task.new(2, "富商的任务", "去问问旅馆老板吧", false,-1))
  427.     @list.push(Task.new(3, "主线任务3", "暂无描述", true, 1))
  428.     @list.push(Task.new(4, "主线任务4", "暂无描述", true, 1))
  429.     @list.push(Task.new(5, "支线任务2", "暂无描述", false, 2))
  430.     @list.push(Task.new(6, "支线任务3", "暂无描述", false))
  431.     @list.push(Task.new(7, "主线任务5", "暂无描述", true, 1))
  432.   end
  433.   def get_task(index)
  434.     @list[index]
  435.   end
  436. end

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2015-2-4 07:33:31 | 只看该作者
把 380 行移到 372 行后面试试看

点评

没注意他的位置还要靠@category_window,但是,话说,放在create_category_window下也不对啊,create_category_window下有用到@help_window,但是那时@help_window也没有啊  发表于 2015-2-4 15:03
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
77
在线时间
61 小时
注册时间
2014-11-1
帖子
48
3
 楼主| 发表于 2015-2-4 11:45:39 | 只看该作者
taroxd 发表于 2015-2-4 07:33
把 380 行移到 372 行后面试试看

还是不行 -   -  我放弃了....感谢~
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3298
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
4
发表于 2015-2-4 12:08:32 | 只看该作者
364行往上移2行试试

点评

@category_window 尚未创建,无法确定位置呢~  发表于 2015-2-4 12:09
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
77
在线时间
61 小时
注册时间
2014-11-1
帖子
48
5
 楼主| 发表于 2015-2-4 12:30:59 | 只看该作者
364行就是问题所在 他呆在那 任务描述的框可以正常显示 但失去功能  向上移  会恢复提示功能 但会弹错 我已经放弃了  找到了新的任务脚本  位置在橙光论坛 所以不知道在这发合不合适

点评

380行、395行都要放到372行后面  发表于 2015-2-4 15:12
我发的问题木有解决 不过换了新的任务系统 也算是解决了吧 = =  发表于 2015-2-4 14:48
解决了吗?  发表于 2015-2-4 12:37
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 17:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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