Project1

标题: 求教帮忙看下这个任务脚本 [打印本页]

作者: 踢腿水上飘    时间: 2019-7-30 20:12
标题: 求教帮忙看下这个任务脚本
这个任务脚本简单实用,我也比较满意,唯一的缺陷就是右边那个任务内容的窗口,任务的内容字数一多或者追加2个任务说明就会有内容显示不出来了
有木有大神看看怎么改装一下,让右侧任务内容的窗口可以翻页或者上下滚动显示内容。
应该是Window_TaskRight这个窗口吧……



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

作者: 黄亦天    时间: 2019-7-30 20:12
本帖最后由 黄亦天 于 2019-12-11 03:36 编辑

头像竟然是绿坝娘 好评
顺便换行可以用\n

这脚本也不加个注释 看着挺费劲【

[line]1[/line]

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



半个多小时改完了 在脚本注释下面可以设置最多行数 有点懒得智能判断有多少行了


[line]1[/line]

顺便一说 这个任务文本是支持对话框的特殊带入符的
就是输入\v[10]就会带入变量数值 输入\c[2]就会改成二号颜色什么的
不过不同的是 要两个\才行  例如\\c[2] 后面的字就会变颜色

不过这也是文字会出框的元凶
如果用的是普通绘制文字的方法 就会限制文字范围 一行内容过多就会压扁文字而不会出框

[line]1[/line]
@踢腿水上飘

主要是这个脚本看着眼晕,所以我就设置成固定翻多少行,翻过头也无所谓的设定了。
你要觉得不够就添加最大行数,总之是没上限的。
毕竟阅读只需要向下翻页,后面都是空白也不会有必要翻了。





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