查看: 4716|回复: 13

[已经过期] VA合集中的任务系统使用方法

[复制链接]
梦石
0
星屑
50
在线时间
144 小时
注册时间
2011-7-18
回帖
151
发表于 2013-10-29 13:37:37 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 Xnan 于 2013-11-12 20:14 编辑

VA脚本合集 中有个任务系统 始终没法弄懂,又找不到其他任务脚本,所以拿出本人所有VIP悬赏,望各位大侠指点迷津。。。。
http://rpg.blue/thread-247817-1-1.html
其实我要求的功能很简单,只需要触发NPC接受了任务,在菜单的任务中可以看到已经接受的任务,以及完成了哪些任务。

secondarytile.png

点评

那么加我QQ,我教你  发表于 2013-11-18 14:35
有其他任务脚本  发表于 2013-11-2 08:58
梦石
0
星屑
50
在线时间
378 小时
注册时间
2013-10-14
回帖
213
发表于 2013-10-29 13:57:03 | 显示全部楼层
本帖最后由 batfjtn 于 2013-10-29 17:49 编辑

脚本:任务系统设定

QUEST = {之下
[说明]
  我每个任务设置。
  更多的排名,StXXX,CondXXX,RsltXXX瑞士法郎(或者使用的东西,如参数)
  请参阅节以及定义]
[格式]
  任务ID=>{
    #任务名称,
    #(如果没有显示“)的主要要求,
    #排名Rank.new(追求,r_next r_down)的,
    #初始状态StXXX.new的,
    先决条件[CondXXX.new,...][pre lang="ruby" line="1"]#QUEST = {
  1 => [
    # 任务名称(格式:"任务名",)
    # 委托人(格式:"我给你任务",)
    # 排行升级设置 Rank.new(quest, r_next, r_down),
   
    # 任务获得方式 StGuild.new或者为StEv.new二选一...
    #            StGuild.new为(True)时会直接在列表中显示
    #            如果没有定义的话需要在脚本事件中使用quest_start(任务ID)来接受任务
    #             StEv.new
    #            还没有找到这个任务的使用方式......
   
    # 获取条件[CondXXX.new, …],
    # 完成条件[CondXXX.new, …],
    # 完成报仇[RsltXXX.new, …],
    # 开关操作Sw.new(play_sw, clear_sw, fail_sw),
    # "任务内容"
   
    #以上内容不能修改顺序..说明我都做了很大的表示~!应该能看懂了
  ],
  2 => [-----------],
  3 => [-----------],
  4 => [-----------],
  5 => [-----------],
}

    # ---------代表1里面的东西[/pre]
    #清除条件[CondXXX.new,...]
    #悬赏[RsltXXX.new,...]
    #切换:操作Sw.new(play_sw,clear_sw,fail_sw),
    #任务内容
  }

原本帖子就有写的~~!!

点评

你这个翻译的看不懂,求详细点,最好有范列  发表于 2013-10-29 14:03
最简单的学习方法就是努力回答别人的问题...
任何教程都没有实践来的重要...
XP小问题都能自己解决了,剩下的就是脚本了...
╰⋛⋋⊱⋋๑角⊱☠c色๑⋌⊰⋌⋚╯
回复

使用道具 举报

梦石
0
星屑
407
在线时间
1291 小时
注册时间
2013-1-12
回帖
3349

贵宾

发表于 2013-10-30 10:34:54 | 显示全部楼层

点评

可是我不会用 啊  发表于 2013-10-30 22:38

回复

使用道具 举报

梦石
0
星屑
3348
在线时间
1120 小时
注册时间
2009-4-15
回帖
761
发表于 2013-11-10 20:07:44 | 显示全部楼层
[pre lang="ruby" line="1"]=begin
领取任务:$game_party.get_task(任意数字,任务名称,任务描述)
完成任务:$game_party.finish_task(领取任务时设定的数字)
对已有任务追加说明:$game_party.add_task(任务编号,任务追加描述)

如:
前面有事件$game_party.get_task(1,"测试","只是测试")

此时任务1的说明为

>只是测试

后面完成任务的脚本就是$game_party.finish_task(1)

追加说明$game_party.add_task(1,"真的只是测试哦")

此时任务1的说明为:
>只是测试
>真的只是测试哦

召唤任务界面:SceneManager.call(Scene_Task)

该脚本来自66rpg,发布者:韩云溪
改进:工藤由纪(论坛ID:zyyczp)
=end

#===========================================================
#●任务系统
#===========================================================
class Task
  attr_reader :desc
  attr_reader :finished
  def initialize(origin_name,desc)
    @origin_name = origin_name
    @desc = desc
    @finished = false
  end
  def name
    if @finished
      return @origin_name + "★"
    else
      return @origin_name
    end
  end
  def desc=(desc)
    @desc = desc
  end
  
  def finish
    @finished = true
  end
   
end

class Game_Party < Game_Unit
  alias old_init initialize
  def initialize
    old_init
    @tasks = {}
  end
  def add_task(i,desc)
    @tasks.desc = @tasks.desc + "\n" + desc
  end
  def get_task(i,name,desc)
    @tasks=Task.new(name,desc)
  end
  def have_task?(i)
    @tasks != nil
  end
  def finish_task(i)
    @tasks.finish if have_task?(i)
  end
  def unfinished_tasks
    n = []
    for i in @tasks.values
      next if i.finished
      n.push(i)
    end
    return n
  end
  def finished_tasks
    n = []
    for i in @tasks.values
      next unless i.finished
      n.push(i)
    end
    return n
  end
end

class Window_Task_Type < Window_HorzCommand
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0)
    activate
  end
  def window_width
    return Graphics.width
  end
  def col_max
    return 3
  end
  #--------------------------------------------------------------------------
  # ● コマンドリストの作成
  #--------------------------------------------------------------------------
  def make_command_list
    add_command("未完成任务",  :unfinished_task)
    add_command("已完成任务", :finished_task)
    add_command("取消", :cancel)
  end
end

class Window_TaskLeft < Window_Selectable
  attr_reader :finished
  def initialize
    super(0,48,160,Graphics.height - 48)
    create_contents
    @finished = false
    @Index = 0
    refresh
    deactivate
  end
  def set_finish(finish)
    @finished = finish
    set_item_max
  end
  def item_max
    return @item_max != nil ? @item_max : 0
  end
  def set_item_max
    if @finished
      @item_max = $game_party.finished_tasks.size
    else
      @item_max = $game_party.unfinished_tasks.size
    end
  end

  def refresh
    set_item_max
    super
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index)
    text = ""
    unless @finished
      if $game_party.unfinished_tasks[index] != nil
        text = $game_party.unfinished_tasks[index].name
      end
    else
      if $game_party.finished_tasks[index] != nil
        text = $game_party.finished_tasks[index].name  
      end
    end
    draw_text(item_rect_for_text(index), text)
  end

end

class Window_TaskRight < Window_Base
  attr_reader :left_index
  def initialize
    super(160,48,Graphics.width - 160,Graphics.height - 48)
    create_contents
    @left_index = 0
    @finished = false
    refresh
  end
  def set_index(i)
    @left_index = i
    refresh
  end
  def set_finish(i)
    @finished = i
  end
  
  def refresh
    contents.clear
    draw_desc
  end
  def draw_desc
    if @finished
      if $game_party.finished_tasks[@left_index] != nil
        draw_text_ex(0,0,$game_party.finished_tasks[@left_index].desc)
      end
    else
      if $game_party.unfinished_tasks[@left_index] != nil
        draw_text_ex(0,0,$game_party.unfinished_tasks[@left_index].desc)
      end
    end
  end
  
end

class Scene_Task < Scene_Base
  def start
    super
    create_task_type_window
    create_left_window
    create_right_window
  end
  def update
    super
    if @left_window.active
      if Input.trigger?(:B)
        @left_window.deactivate
        @task_type_window.activate
      end
      if Input.press?(:UP) || Input.press?(:DOWN)
        @right_window.set_finish(@left_window.finished)
        @right_window.set_index(@left_window.index)
      end
    end
  end
  
  def terminate
    super
  end
  def create_task_type_window
    @task_type_window = Window_Task_Type.new
    @task_type_window.set_handler(:unfinished_task,method(:view_unfinished_task))
    @task_type_window.set_handler(:finished_task,method(:view_finished_task))
    @task_type_window.set_handler(:cancel,method(:return_scene))
  end
  def create_left_window
    @left_window = Window_TaskLeft.new
    @left_window.set_finish(false)
    @left_window.refresh
  end
  def create_right_window
    @right_window = Window_TaskRight.new
    @right_window.refresh
  end
  def view_unfinished_task
    @left_window.set_finish(false)
    @left_window.refresh
    @left_window.activate
    @task_type_window.deactivate
    @right_window.set_finish(false)
    @right_window.set_index(@left_window.index)
  end
  def view_finished_task
    @left_window.set_finish(true)
    @left_window.refresh
    @left_window.activate
    @task_type_window.deactivate
    @right_window.set_finish(true)
    @right_window.set_index(@left_window.index)
  end
  
end[/pre]

点评

把121行改成@Index = 0  发表于 2013-11-12 21:58
121行显示错误。。。  发表于 2013-11-12 20:06
回复

使用道具 举报

梦石
0
星屑
50
在线时间
144 小时
注册时间
2011-7-18
回帖
151
 楼主| 发表于 2013-11-12 20:06:39 | 显示全部楼层
回复

使用道具 举报

梦石
0
星屑
50
在线时间
144 小时
注册时间
2011-7-18
回帖
151
 楼主| 发表于 2013-11-15 14:58:50 | 显示全部楼层
{:4_147:}没人回答 悬赏可以取消吗
回复

使用道具 举报

梦石
0
星屑
40
在线时间
90 小时
注册时间
2013-6-26
回帖
79
发表于 2013-11-15 17:31:30 | 显示全部楼层
同脚本盲,表示这一大串脚本还真不知道怎么用
我没有耐心也没收藏癖,搞了半天的蛋少年就点下吧



回复

使用道具 举报

梦石
0
星屑
803
在线时间
2068 小时
注册时间
2011-10-3
回帖
1620
发表于 2013-11-15 18:42:44 | 显示全部楼层
{:2_276:}需要人来加QQ手把手教你么

点评

需要!!  发表于 2013-11-18 11:27
回复

使用道具 举报

梦石
0
星屑
51
在线时间
133 小时
注册时间
2010-9-23
回帖
131
发表于 2013-11-15 21:32:05 | 显示全部楼层
哇土豪我们做朋友吧...
这里事件党(其实是因为脚本盲的原因)。。
可以用简单的事件做就是麻烦= =
我是用物品纸条【任务名称】代替的,然后要用到公共事件显示文字(任务内容)什么的。
就可以变成【伪·任务系统】了》。。

点评

不需要这个  发表于 2013-11-18 11:27
麻烦叫我栗子吧!
虽然ID是字母君....

回复

使用道具 举报

梦石
0
星屑
50
在线时间
117 小时
注册时间
2008-7-18
回帖
31
发表于 2013-12-4 23:09:42 | 显示全部楼层
正好我在用这个脚本,可以和你分享下用法
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部