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

Project1

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

[已经解决] 请问任务系统怎么弄呢?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
403 小时
注册时间
2012-8-12
帖子
1173
跳转到指定楼层
1
发表于 2013-6-26 16:12:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 颜LOSE 于 2013-6-27 15:19 编辑

请问任务系统怎么弄呢?找了N种方法都不行。

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

2
发表于 2013-6-26 16:25:07 | 只看该作者
继续寻找,第 n+1 种方法 {:2_282:}
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
403 小时
注册时间
2012-8-12
帖子
1173
3
 楼主| 发表于 2013-6-26 16:28:02 | 只看该作者
Sion 发表于 2013-6-26 16:25
继续寻找,第 n+1 种方法

我已经找了两个月,依然没有找到
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
714
在线时间
224 小时
注册时间
2009-2-19
帖子
227
4
发表于 2013-6-26 17:23:21 | 只看该作者
本帖最后由 根五 于 2013-6-26 17:24 编辑

这个行不行呢?
  1. =begin
  2. 领取任务:$game_party.get_task(任意数字,任务名称,任务描述)
  3. 完成任务:$game_party.finish_task(领取任务时设定的数字)
  4. 对已有任务追加说明:$game_party.add_task(任务编号,任务追加描述)

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

  7. 此时任务1的说明为

  8. >只是测试

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

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

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

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

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

  18. #===========================================================
  19. #●任务系统
  20. #===========================================================
  21. class Task
  22.   attr_reader :desc
  23.   attr_reader :finished
  24.   def initialize(origin_name,desc)
  25.     @origin_name = origin_name
  26.     @desc = desc
  27.     @finished = false
  28.   end
  29.   def name
  30.     if @finished
  31.       return @origin_name + "(完成)"
  32.     else
  33.       return @origin_name
  34.     end
  35.   end
  36.   def desc=(desc)
  37.     @desc = desc
  38.   end
  39.   
  40.   def finish
  41.     @finished = true
  42.   end
  43.    
  44. end

  45. class Game_Party < Game_Unit
  46.   alias old_init initialize
  47.   def initialize
  48.     old_init
  49.     @tasks = {}
  50.   end
  51.   def add_task(i,desc)
  52.     @tasks[i].desc = @tasks[i].desc + "\n" + desc
  53.   end
  54.   def get_task(i,name,desc)
  55.     @tasks[i]=Task.new(name,desc)
  56.   end
  57.   def have_task?(i)
  58.     @tasks[i] != nil
  59.   end
  60.   def finish_task(i)
  61.     @tasks[i].finish if have_task?(i)
  62.   end
  63.   def unfinished_tasks
  64.     n = []
  65.     for i in @tasks.values
  66.       next if i.finished
  67.       n.push(i)
  68.     end
  69.     return n
  70.   end
  71.   def finished_tasks
  72.     n = []
  73.     for i in @tasks.values
  74.       next unless i.finished
  75.       n.push(i)
  76.     end
  77.     return n
  78.   end
  79. end

  80. class Window_Task_Type < Window_HorzCommand
  81.   #--------------------------------------------------------------------------
  82.   # ● オブジェクト初期化
  83.   #--------------------------------------------------------------------------
  84.   def initialize
  85.     super(0, 0)
  86.     activate
  87.   end
  88.   def window_width
  89.     return Graphics.width
  90.   end
  91.   def col_max
  92.     return 3
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● コマンドリストの作成
  96.   #--------------------------------------------------------------------------
  97.   def make_command_list
  98.     add_command("未完成任务",  :unfinished_task)
  99.     add_command("已完成任务", :finished_task)
  100.     add_command("取消", :cancel)
  101.   end
  102. end

  103. class Window_TaskLeft < Window_Selectable
  104.   attr_reader :finished
  105.   def initialize
  106.     super(0,48,160,Graphics.height - 48)
  107.     create_contents
  108.     @finished = false
  109.     @index = 0
  110.     refresh
  111.     deactivate
  112.   end
  113.   def set_finish(finish)
  114.     @finished = finish
  115.     set_item_max
  116.   end
  117.   def item_max
  118.     return @item_max != nil ? @item_max : 0
  119.   end
  120.   def set_item_max
  121.     if @finished
  122.       @item_max = $game_party.finished_tasks.size
  123.     else
  124.       @item_max = $game_party.unfinished_tasks.size
  125.     end
  126.   end

  127.   def refresh
  128.     set_item_max
  129.     super
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● 項目の描画
  133.   #--------------------------------------------------------------------------
  134.   def draw_item(index)
  135.     text = ""
  136.     unless @finished
  137.       if $game_party.unfinished_tasks[index] != nil
  138.         text = $game_party.unfinished_tasks[index].name
  139.       end
  140.     else
  141.       if $game_party.finished_tasks[index] != nil
  142.         text = $game_party.finished_tasks[index].name  
  143.       end
  144.     end
  145.     draw_text(item_rect_for_text(index), text)
  146.   end

  147. end

  148. class Window_TaskRight < Window_Base
  149.   attr_reader :left_index
  150.   def initialize
  151.     super(160,48,Graphics.width - 160,Graphics.height - 48)
  152.     create_contents
  153.     @left_index = 0
  154.     @finished = false
  155.     refresh
  156.   end
  157.   def set_index(i)
  158.     @left_index = i
  159.     refresh
  160.   end
  161.   def set_finish(i)
  162.     @finished = i
  163.   end
  164.   
  165.   def refresh
  166.     contents.clear
  167.     draw_desc
  168.   end
  169.   def draw_desc
  170.     if @finished
  171.       if $game_party.finished_tasks[@left_index] != nil
  172.         draw_text_ex(0,0,$game_party.finished_tasks[@left_index].desc)
  173.       end
  174.     else
  175.       if $game_party.unfinished_tasks[@left_index] != nil
  176.         draw_text_ex(0,0,$game_party.unfinished_tasks[@left_index].desc)
  177.       end
  178.     end
  179.   end
  180.   
  181. end

  182. class Scene_Task < Scene_Base
  183.   def start
  184.     super
  185.     create_task_type_window
  186.     create_left_window
  187.     create_right_window
  188.   end
  189.   def update
  190.     super
  191.     if @left_window.active
  192.       if Input.trigger?(:B)
  193.         @left_window.deactivate
  194.         @task_type_window.activate
  195.       end
  196.       if Input.trigger?(:UP) || Input.trigger?(:DOWN)
  197.         @right_window.set_finish(@left_window.finished)
  198.         @right_window.set_index(@left_window.index)
  199.       end
  200.     end
  201.   end
  202.   
  203.   def terminate
  204.     super
  205.   end
  206.   def create_task_type_window
  207.     @task_type_window = Window_Task_Type.new
  208.     @task_type_window.set_handler(:unfinished_task,method(:view_unfinished_task))
  209.     @task_type_window.set_handler(:finished_task,method(:view_finished_task))
  210.     @task_type_window.set_handler(:cancel,method(:return_scene))
  211.   end
  212.   def create_left_window
  213.     @left_window = Window_TaskLeft.new
  214.     @left_window.set_finish(false)
  215.     @left_window.refresh
  216.   end
  217.   def create_right_window
  218.     @right_window = Window_TaskRight.new
  219.     @right_window.refresh
  220.   end
  221.   def view_unfinished_task
  222.     @left_window.set_finish(false)
  223.     @left_window.refresh
  224.     @left_window.activate
  225.     @task_type_window.deactivate
  226.     @right_window.set_finish(false)
  227.     @right_window.set_index(@left_window.index)
  228.   end
  229.   def view_finished_task
  230.     @left_window.set_finish(true)
  231.     @left_window.refresh
  232.     @left_window.activate
  233.     @task_type_window.deactivate
  234.     @right_window.set_finish(true)
  235.     @right_window.set_index(@left_window.index)
  236.   end
  237.   
  238. end
复制代码

点评

具体要怎么弄呢?  发表于 2013-6-26 17:42

评分

参与人数 1星屑 +70 收起 理由
Sion + 70 感谢帮忙

查看全部评分

[img][/img]
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
1083 小时
注册时间
2013-3-29
帖子
2394
5
发表于 2013-6-26 17:32:56 | 只看该作者
要不搜索"任务系统"要不用事件做,要不就用LS的。

点评

找了很多次,都没有合适的,简单来说不是系统错误就是只适用于XP  发表于 2013-6-26 17:43

坑的进度如上                                                                                                        点击↑
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
403 小时
注册时间
2012-8-12
帖子
1173
6
 楼主| 发表于 2013-6-27 08:11:46 | 只看该作者
根五 发表于 2013-6-26 17:23
这个行不行呢?

在一个脚本集合里发现了使用方法,正在试用,谢谢了
#==============================================================================02.# ■ 弹性滚动地图 V 1.00 BY SLICK03.#------------------------------------------------------------------------------04.#  处理主角的类。事件启动的判定、以及地图的滚动等功能。05.# 本类的实例请参考 $game_player。06.# 我:。。。这个黄金版已经被改的面目全非了07.#==============================================================================08. 09.class Game_Player < Game_Character10.  MOVESPEA = 0.265625#这数值。。。囧11.  def update_scroll(last_real_x, last_real_y)12.    ax1 = $game_map.adjust_x(last_real_x)13.    ay1 = $game_map.adjust_y(last_real_y)14.    ax2 = $game_map.adjust_x(@real_x)15.    ay2 = $game_map.adjust_y(@real_y)16.    movespeb = (2 ** (@move_speed+1))*MOVESPEA17.    movesped = movespeb / Graphics.width18.    movespec = movespeb / Graphics.height19.    tmp=center_x-ax220.    $game_map.scroll_left(movesped*tmp) if tmp>021.    $game_map.scroll_right(-movesped*tmp) if tmp<022.    tmp=center_y-ay223.    $game_map.scroll_up(movespec*tmp) if tmp>024.    $game_map.scroll_down(-movespec*tmp) if tmp<0    25.  end  26.end#==============================================================================
# 领取任务:$game_party.get_task(任意数字,任务名称,任务描述)
# 完成任务:$game_party.finish_task(领取任务时设定的数字)
# 如:前面有事件$game_party.get_task(1,"测试","只是测试")
# 后面完成任务的脚本就是$game_party.finish_task(1)
# 召唤任务界面:SceneManager.call(Scene_Task)
#==============================================================================

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 finish
    @finished = true
  end
   
end

class Game_Party < Game_Unit
  alias old_init initialize
  def initialize
    old_init
    @tasks = {}
  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.trigger?(:UP) || Input.trigger?(: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
      #--------------------------------------------------------------------------

  # ● 生成背景

  #--------------------------------------------------------------------------

  def create_background

    @background_sprite = Sprite.new

    @background_sprite.bitmap =Cache.load_bitmap("Graphics/System/","Menuback")

    @background_sprite.color.set(0,0, 0,0)

  end

end
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-18 12:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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