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

Project1

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

[有事请教] 【已解决】任务系统脚本超过第一页的已完成任务名字消失

[复制链接]

Lv1.梦旅人

梦石
0
星屑
127
在线时间
65 小时
注册时间
2024-1-8
帖子
17
跳转到指定楼层
1
发表于 2025-2-7 17:45:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
30星屑
本帖最后由 神隐的主犯 于 2025-2-7 20:57 编辑

RUBY 代码复制
  1. =begin
  2. 追加:具体判定某个任务是否完成只需要:$game_party.tasks(编号).finished(完成的情况下返回真,未完成返回假,说白了,就是完成的情况下条件成立)如:
  3. $game_party.tasks(1).finished #=> 完成时为true,没有完成为false
  4. 在条件分歧的情况下,只需要在脚本里面填上这样一行就了。
  5. 领取任务:$game_party.get_task(任意数字,任务名称,任务描述)
  6. 完成任务:$game_party.finish_task(领取任务时设定的数字)
  7. 对已有任务追加说明:$game_party.add_task(任务编号,任务追加描述)
  8.  
  9. 如:
  10. 前面有事件$game_party.get_task(1,"测试","只是测试")
  11.  
  12. 此时任务1的说明为
  13.  
  14. >只是测试
  15.  
  16. 后面完成任务的脚本就是$game_party.finish_task(1)
  17.  
  18. 追加说明$game_party.add_task(1,"真的只是测试哦")
  19.  
  20. 此时任务1的说明为:
  21. >只是测试
  22. >真的只是测试哦
  23.  
  24. 召唤任务界面:SceneManager.call(Scene_Task)
  25.  
  26. 该脚本来自66rpg,发布者:韩云溪
  27. 改进:工藤由纪(论坛ID:zyyczp)
  28. =end
  29.  
  30. #===========================================================
  31. #●任务系统
  32. #===========================================================
  33. class Task
  34.   attr_reader :desc
  35.   attr_reader :finished
  36.   def initialize(origin_name,desc)
  37.     @origin_name = origin_name
  38.     @desc = desc
  39.     @finished = false
  40.   end
  41.   def name
  42.     if @finished
  43.       return @origin_name + "(完成)"
  44.     else
  45.       return @origin_name
  46.     end
  47.   end
  48.   def desc=(desc)
  49.     @desc = desc
  50.   end
  51.  
  52.   def finish
  53.     @finished = true
  54.   end
  55.  
  56. end
  57.  
  58. class Game_Party < Game_Unit
  59.   alias old_init initialize
  60.   def initialize
  61.     old_init
  62.     @tasks = {}
  63.   end
  64.   def add_task(i,desc)
  65.     @tasks[i].desc = @tasks[i].desc + "\n" + desc
  66.   end
  67.   def get_task(i,name,desc)
  68.     @tasks[i]=Task.new(name,desc)
  69.   end
  70.   def have_task?(i)
  71.     @tasks[i] != nil
  72.   end
  73.   def finish_task(i)
  74.     @tasks[i].finish if have_task?(i)
  75.   end
  76.   def unfinished_tasks
  77.     n = []
  78.     for i in @tasks.values
  79.       next if i.finished
  80.       n.push(i)
  81.     end
  82.     return n
  83.   end
  84.   def finished_tasks
  85.     n = []
  86.     for i in @tasks.values
  87.       next unless i.finished
  88.       n.push(i)
  89.     end
  90.     return n
  91.   end
  92. end
  93.  
  94. class Window_Task_Type < Window_HorzCommand
  95.   #--------------------------------------------------------------------------
  96.   # ● オブジェクト初期化
  97.   #--------------------------------------------------------------------------
  98.   def initialize
  99.     super(0, 0)
  100.     activate
  101.   end
  102.   def window_width
  103.     return Graphics.width
  104.   end
  105.   def col_max
  106.     return 3
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● コマンドリストの作成
  110.   #--------------------------------------------------------------------------
  111.   def make_command_list
  112.     add_command("未完成任务",  :unfinished_task)
  113.     add_command("已完成任务", :finished_task)
  114.     add_command("取消", :cancel)
  115.   end
  116. end
  117.  
  118. class Window_TaskLeft < Window_Selectable
  119.   attr_reader :finished
  120.   def initialize
  121.     super(0,48,160,Graphics.height - 48)
  122.     create_contents
  123.     @finished = false
  124.     @index = 0
  125.     refresh
  126.     deactivate
  127.   end
  128.   def set_finish(finish)
  129.     @finished = finish
  130.     set_item_max
  131.   end
  132.   def item_max
  133.     return @item_max != nil ? @item_max : 0
  134.   end
  135.   def set_item_max
  136.     if @finished
  137.       @item_max = $game_party.finished_tasks.size
  138.     else
  139.       @item_max = $game_party.unfinished_tasks.size
  140.     end
  141.   end
  142.  
  143.   def refresh
  144.     set_item_max
  145.     super
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # ● 項目の描画
  149.   #--------------------------------------------------------------------------
  150.   def draw_item(index)
  151.     text = ""
  152.     unless @finished
  153.       if $game_party.unfinished_tasks[index] != nil
  154.         text = $game_party.unfinished_tasks[index].name
  155.       end
  156.     else
  157.       if $game_party.finished_tasks[index] != nil
  158.         text = $game_party.finished_tasks[index].name  
  159.       end
  160.     end
  161.     draw_text(item_rect_for_text(index), text)
  162.   end
  163.  
  164. end
  165.  
  166. class Window_TaskRight < Window_Base
  167.   attr_reader :left_index
  168.   def initialize
  169.     super(160,48,Graphics.width - 160,Graphics.height - 48)
  170.     create_contents
  171.     @left_index = 0
  172.     @finished = false
  173.     refresh
  174.   end
  175.   def set_index(i)
  176.     @left_index = i
  177.     refresh
  178.   end
  179.   def set_finish(i)
  180.     @finished = i
  181.   end
  182.  
  183.   def refresh
  184.     contents.clear
  185.     draw_desc
  186.   end
  187.   def draw_desc
  188.     if @finished
  189.       if $game_party.finished_tasks[@left_index] != nil
  190.         draw_text_ex(0,0,$game_party.finished_tasks[@left_index].desc)
  191.       end
  192.     else
  193.       if $game_party.unfinished_tasks[@left_index] != nil
  194.         draw_text_ex(0,0,$game_party.unfinished_tasks[@left_index].desc)
  195.       end
  196.     end
  197.   end
  198.  
  199. end
  200.  
  201. class Scene_Task < Scene_Base
  202.   def start
  203.     super
  204.     create_task_type_window
  205.     create_left_window
  206.     create_right_window
  207.   end
  208.   def update
  209.     super
  210.     if @left_window.active
  211.       if Input.trigger?(:B)
  212.         @left_window.deactivate
  213.         @task_type_window.activate
  214.       end
  215.       if Input.trigger?(:UP) || Input.trigger?(:DOWN)
  216.         @right_window.set_finish(@left_window.finished)
  217.         @right_window.set_index(@left_window.index)
  218.       end
  219.     end
  220.   end
  221.  
  222.   def terminate
  223.     super
  224.   end
  225.   def create_task_type_window
  226.     @task_type_window = Window_Task_Type.new
  227.     @task_type_window.set_handler(:unfinished_task,method(:view_unfinished_task))
  228.     @task_type_window.set_handler(:finished_task,method(:view_finished_task))
  229.     @task_type_window.set_handler(:cancel,method(:return_scene))
  230.   end
  231.   def create_left_window
  232.     @left_window = Window_TaskLeft.new
  233.     @left_window.set_finish(false)
  234.     @left_window.refresh
  235.   end
  236.   def create_right_window
  237.     @right_window = Window_TaskRight.new
  238.     @right_window.refresh
  239.   end
  240.   def view_unfinished_task
  241.     @left_window.set_finish(false)
  242.     @left_window.refresh
  243.     @left_window.activate
  244.     @task_type_window.deactivate
  245.     @right_window.set_finish(false)
  246.     @right_window.set_index(@left_window.index)
  247.   end
  248.   def view_finished_task
  249.     @left_window.set_finish(true)
  250.     @left_window.refresh
  251.     @left_window.activate
  252.     @task_type_window.deactivate
  253.     @right_window.set_finish(true)
  254.     @right_window.set_index(@left_window.index)
  255.   end
  256.  
  257. end



已经解决了。

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

本版积分规则

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

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

GMT+8, 2025-2-17 16:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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