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

Project1

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

[已经过期] 关于任务系统

[复制链接]

Lv1.梦旅人

梦石
0
星屑
101
在线时间
86 小时
注册时间
2011-12-11
帖子
194
跳转到指定楼层
1
发表于 2015-7-19 18:13:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
看了下搜索 好像任务系统只能靠脚本实现  疾风怒涛大大的资源也都没了 想问下谁还保存着好用的任务系统的脚本可否赏赐一个 稍微告知下使用办法   在下在此谢过了

Lv2.观梦者

梦石
0
星屑
457
在线时间
1409 小时
注册时间
2010-9-23
帖子
557
2
发表于 2015-7-19 18:24:35 | 只看该作者
本帖最后由 黑崎一护 于 2015-7-19 18:31 编辑

这个是描述型的
  1. #encoding:utf-8

  2. #==============================================================================
  3. # ■ Task
  4. #------------------------------------------------------------------------------
  5. #  任务类。本类在 Game_Task 类的内部使用。
  6. #   任务属性:名称,内容,是否是主线任务,是否有父任务
  7. #==============================================================================

  8. class Task
  9.   attr_reader :index
  10.   attr_reader :name
  11.   attr_reader :description
  12.   attr_reader :type
  13.   attr_reader :father_task
  14.   attr_reader :finished
  15.   #--------------------------------------------------------------------------
  16.   # ● 初始化对象
  17.   #--------------------------------------------------------------------------
  18.   def initialize(index, name, description, type = true, father_task = -1)
  19.     @type = type
  20.     @name = name
  21.     @description = description
  22.     @father_task = father_task
  23.     @index = index
  24.     @finished = false
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 是否是主线任务
  28.   #--------------------------------------------------------------------------
  29.   def key_task?
  30.     @type
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 是否是子任务
  34.   #--------------------------------------------------------------------------
  35.   def has_father_task?
  36.     @father_task > -1
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 完成任务
  40.   #--------------------------------------------------------------------------
  41.   def finish
  42.     @finished = true
  43.   end

  44. end

  45. #==============================================================================
  46. # ■ Game_Party
  47. #==============================================================================

  48. class Game_Party < Game_Unit
  49.   #--------------------------------------------------------------------------
  50.   # ● 初始化对象
  51.   #--------------------------------------------------------------------------
  52.   alias old_init initialize
  53.   def initialize
  54.     old_init
  55.     @tasks = {}
  56.     @sub_tasks= {}
  57.     #定义了一个任务列表,提前把所有的任务都写进去了
  58.     @task_list=TaskList.new
  59.     @sub = false
  60.   end
  61.   #--------------------------------------------------------------------------
  62.   # ● 是否存在子任务
  63.   #--------------------------------------------------------------------------
  64.   def is_sub
  65.     @sub
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 启用子任务
  69.   #--------------------------------------------------------------------------
  70.   def set_sub
  71.     @sub = true
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 添加新的任务
  75.   #--------------------------------------------------------------------------
  76.   def new_task(i, name, desc, type, father_task = -1)
  77.     if !is_sub
  78.       @tasks[i] = tmp if !have_task?(i)
  79.       return
  80.     end
  81.     tmp = Task.new(i, name, desc, type, father_task)
  82.     if father_task < 0
  83.       @tasks[i] = tmp if !have_task?(i)
  84.     else
  85.       @sub_tasks[i] = tmp if father_task?(father_task) && !sub_task?(i)
  86.     end   
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 从已定义好的任务列表中添加新的任务
  90.   #--------------------------------------------------------------------------
  91.   def set_task(index)
  92.     temp = @task_list.get_task(index)
  93.     if !is_sub
  94.       @tasks[index] = temp if !have_task?(index)
  95.       return
  96.     end
  97.     if temp.has_father_task?
  98.       @sub_tasks[index] = temp if father_task?(temp.father_task) && !sub_task?(index)
  99.     else
  100.       @tasks[index] = temp if !have_task?(index)
  101.     end
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 查询任务是否存在
  105.   #--------------------------------------------------------------------------
  106.   def have_task?(i)
  107.     return father_task?(i) || sub_task?(i)
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● 查询父任务是否存在
  111.   #--------------------------------------------------------------------------
  112.   def father_task?(i)
  113.     @tasks[i] != nil
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● 查询子任务是否存在
  117.   #--------------------------------------------------------------------------
  118.   def sub_task?(i)
  119.     @sub_tasks[i] != nil
  120.   end
  121.   #--------------------------------------------------------------------------
  122.   # ● 完成已有的任务,如果该任务有没有完成的子任务,则不能完成
  123.   #--------------------------------------------------------------------------
  124.   def finish_task(i)
  125.     @tasks[i].finish if father_task?(i) && sub_tasks_finished?(i)
  126.     @sub_tasks[i].finish if sub_task?(i)
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 查询父任务序号为i的子任务,返回一个数组
  130.   #--------------------------------------------------------------------------
  131.   def get_sub_tasks(i)
  132.     return [] if !is_sub
  133.     tmp = []
  134.     for j in @sub_tasks.values
  135.       next if j.father_task != i
  136.       tmp.push(j)
  137.     end
  138.     return tmp
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● 查询父任务序号为i的子任务是否都已完成
  142.   #--------------------------------------------------------------------------
  143.   def sub_tasks_finished?(i)
  144.     return true if !is_sub
  145.     for j in @sub_tasks.values
  146.       next if j.father_task != i
  147.       return false if !j.finished
  148.     end
  149.     return true
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # ● 获取任务类型为cat的任务集合
  153.   #--------------------------------------------------------------------------
  154.   def all_tasks(cat)
  155.     n = []
  156.     m = []
  157.     for i in @tasks.values
  158.       next if i.key_task? != cat
  159.       tmp = get_sub_tasks(i.index)
  160.       if i.finished
  161.         n.push(i)
  162.         n += tmp
  163.       else
  164.         m.push(i)
  165.         m += tmp
  166.       end
  167.     end
  168.     return m + n
  169.   end

  170. end

  171. #==============================================================================
  172. # ■ Window_TaskList
  173. #------------------------------------------------------------------------------
  174. #  任务画面中,显示已获得任务的窗口。
  175. #==============================================================================

  176. class Window_TaskList < Window_Selectable
  177.   #--------------------------------------------------------------------------
  178.   # ● 初始化对象
  179.   #--------------------------------------------------------------------------
  180.   def initialize(x, y, width, height)
  181.     super
  182.     @category = :none
  183.     @data = []
  184.     @sub_task = false
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● 设置是否有子任务
  188.   #--------------------------------------------------------------------------
  189.   def has_sub_task
  190.     @sub_task = true
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # ● 设置分类
  194.   #--------------------------------------------------------------------------
  195.   def category=(category)
  196.     return if @category == category
  197.     @category = category
  198.     if category == :true
  199.       refresh(true)
  200.     else
  201.       refresh(false)
  202.     end
  203.     self.oy = 0
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ● 获取列数
  207.   #--------------------------------------------------------------------------
  208.   def col_max
  209.     if @sub_task
  210.       return 1
  211.     else
  212.       return 2
  213.     end
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # ● 获取项目数
  217.   #--------------------------------------------------------------------------
  218.   def item_max
  219.     @data ? @data.size : 1
  220.   end
  221.   #--------------------------------------------------------------------------
  222.   # ● 获取任务
  223.   #--------------------------------------------------------------------------
  224.   def item
  225.     @data && index >= 0 ? @data[index] : nil
  226.   end
  227.   #--------------------------------------------------------------------------
  228.   # ● 获取选择任务的有效状态
  229.   #--------------------------------------------------------------------------
  230.   def current_item_enabled?
  231.     enable?(@data[index])
  232.   end
  233.   #--------------------------------------------------------------------------
  234.   # ● 查询此任务是否完成
  235.   #--------------------------------------------------------------------------
  236.   def enable?(item)
  237.     !item.finished
  238.   end
  239.   #--------------------------------------------------------------------------
  240.   # ● 生成任务列表
  241.   #--------------------------------------------------------------------------
  242.   def make_item_list(type)
  243.     @data = $game_party.all_tasks(type)
  244.   end
  245.   #--------------------------------------------------------------------------
  246.   # ● 返回上一个选择的位置
  247.   #--------------------------------------------------------------------------
  248.   def select_last
  249.     select(0)
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ● 绘制项目
  253.   #--------------------------------------------------------------------------
  254.   def draw_item(index)
  255.     item = @data[index]
  256.     if item
  257.       rect = item_rect(index)
  258.       rect.width -= 4
  259.       draw_item_name(item, rect.x, rect.y, enable?(item))
  260.     end
  261.   end
  262.   #--------------------------------------------------------------------------
  263.   # ● 绘制名称
  264.   #     enabled : 有效的标志。false 的时候使用半透明效果绘制
  265.   #--------------------------------------------------------------------------
  266.   def draw_item_name(item, x, y, enabled = true, width = 172)
  267.     return unless item
  268.     text = item.name
  269.     text = "    " + text if @sub_task && item.has_father_task?
  270.     text += "(已完成)" if item.finished
  271.     change_color(normal_color, enabled)
  272.     draw_text(x, y, width, line_height, text)
  273.   end
  274.   #--------------------------------------------------------------------------
  275.   # ● 更新帮助内容
  276.   #--------------------------------------------------------------------------
  277.   def update_help
  278.     @help_window.set_item(item)
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # ● 刷新
  282.   #--------------------------------------------------------------------------
  283.   def refresh(type)
  284.     make_item_list(type)
  285.     create_contents
  286.     draw_all_items
  287.   end
  288. end

  289. #==============================================================================
  290. # ■ Window_TaskCategory
  291. #------------------------------------------------------------------------------
  292. #  任务画面中,显示任务列表的窗口。
  293. #==============================================================================

  294. class Window_TaskCategory < Window_HorzCommand
  295.   #--------------------------------------------------------------------------
  296.   # ● 定义实例变量
  297.   #--------------------------------------------------------------------------
  298.   attr_reader   :item_window
  299.   #--------------------------------------------------------------------------
  300.   # ● 初始化对象
  301.   #--------------------------------------------------------------------------
  302.   def initialize
  303.     super(0, 0)
  304.   end
  305.   #--------------------------------------------------------------------------
  306.   # ● 获取窗口的宽度
  307.   #--------------------------------------------------------------------------
  308.   def window_width
  309.     Graphics.width
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● 获取列数
  313.   #--------------------------------------------------------------------------
  314.   def col_max
  315.     return 2
  316.   end
  317.   #--------------------------------------------------------------------------
  318.   # ● 更新画面
  319.   #--------------------------------------------------------------------------
  320.   def update
  321.     super
  322.     @item_window.category = current_symbol if @item_window
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # ● 生成指令列表
  326.   #--------------------------------------------------------------------------
  327.   def make_command_list
  328.     add_command("主线任务",   :true)
  329.     add_command("支线任务",   :false)
  330.   end
  331.   #--------------------------------------------------------------------------
  332.   # ● 设置任务窗口
  333.   #--------------------------------------------------------------------------
  334.   def item_window=(item_window)
  335.     @item_window = item_window
  336.     update
  337.   end
  338. end

  339. #==============================================================================
  340. # ■ Scene_Task
  341. #------------------------------------------------------------------------------
  342. #  任务画面
  343. #==============================================================================

  344. class Scene_Task < Scene_ItemBase
  345.   #--------------------------------------------------------------------------
  346.   # ● 开始处理
  347.   #--------------------------------------------------------------------------
  348.   def start
  349.     super
  350.     create_help_window
  351.     create_category_window
  352.     create_task_window
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ● 生成分类窗口
  356.   #--------------------------------------------------------------------------
  357.   def create_category_window
  358.     @category_window = Window_TaskCategory.new
  359.     @category_window.viewport = @viewport
  360.     @category_window.help_window = @help_window
  361.     @category_window.y = @help_window.height
  362.     @category_window.set_handler(:ok,     method(:on_category_ok))
  363.     @category_window.set_handler(:cancel, method(:return_scene))
  364.   end
  365.   #--------------------------------------------------------------------------
  366.   # ● 生成任务窗口
  367.   #--------------------------------------------------------------------------
  368.   def create_task_window
  369.     wy = @category_window.y + @category_window.height
  370.     wh = Graphics.height - wy
  371.     @item_window = Window_TaskList.new(0, wy, Graphics.width, wh)
  372.     #如果允许子任务则显示子任务
  373.     @item_window.has_sub_task if $game_party.is_sub
  374.     @item_window.viewport = @viewport
  375.     @item_window.help_window = @help_window
  376.     @item_window.set_handler(:cancel, method(:on_item_cancel))
  377.     @category_window.item_window = @item_window
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ● 分类“确定”
  381.   #--------------------------------------------------------------------------
  382.   def on_category_ok
  383.     @item_window.activate
  384.     @item_window.select_last
  385.   end
  386.   #--------------------------------------------------------------------------
  387.   # ● 任务“取消”
  388.   #--------------------------------------------------------------------------
  389.   def on_item_cancel
  390.     @item_window.unselect
  391.     @category_window.activate
  392.   end
  393. end
  394. #==============================================================================
  395. # ■ TaskList
  396. #------------------------------------------------------------------------------
  397. #  
  398. #==============================================================================
  399. class TaskList
  400.   def initialize
  401.     #允许子任务
  402.     @list = []
  403.     @list.push(Task.new(0, "任务0", "任务描述0任务描述0任务描述0任务描述0任务"))
  404.     @list.push(Task.new(1, "任务一", "任务描述1"))
  405.     @list.push(Task.new(2, "任务2", "任务描述2",false))
  406.     @list.push(Task.new(3, "任务3", "任务描述3", true, 1))
  407.     @list.push(Task.new(4, "任务4", "任务描述4", true, 1))
  408.     @list.push(Task.new(5, "任务5", "任务描述5", false, 2))
  409.     @list.push(Task.new(6, "任务6", "任务描述6", false))
  410.     @list.push(Task.new(7, "任务7", "任务描述7", true, 1))
  411.   end
  412.   def get_task(index)
  413.     @list[index]
  414.   end
  415. end
复制代码


脚本使用方法:

打开任务界面:SceneManager.call(Scene_Task)

添加任务有两种方式(在事件页里编辑)
1 $game_party.new_task(任务序号, 任务名称, 任务描述, 任务类型, 父任务序号)
如果任务类型为true,则为主线任务,否则为支线任务,默认是true
如果父任务序号为-1,则这个任务没有父任务,他自己就是一个顶级的父任务,可以拥有子任务了。如果父任务序号为已存在的父任务,则可以顺利生成一个子任务,否则不能生成任务

2 第二种添加方式是$game_party.set_task(该任务在TaskList里的序号)
当然这个任务在TaskList里的序号和他本身的那个序号是一样的了,如果你要写成不一样的,应该是会出问题。。

完成任务
$game_party.finish_task(任务序号)

子任务系统
系统默认是不使用子任务的,这个时候任务列表里面显示任务的时候会有两列。
如果想要使用子任务的话,需要调用$game_party.set_sub
然后任务列表里就只显示一列了(- -!如果显示两列会灰常混乱),然后子任务会在他的父任务后面缩进显示
该系统只支持一级子任务。。

点评

这个脚本的任务开始提示与结束提示都是在事件页里面编辑的  发表于 2015-7-19 18:37
如:前面有事件$game_party.get_task(1,"测试","只是测试") 后面完成任务的脚本就是$game_party.finish_task(1)  发表于 2015-7-19 18:33
我想问一下 这个怎么用 复制代码 加在ace的附加脚本里面就可以吗  发表于 2015-7-19 18:30
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
457
在线时间
1409 小时
注册时间
2010-9-23
帖子
557
3
发表于 2015-7-19 19:06:11 | 只看该作者
任务系统之二:
zhangchi5大大的任务系统:


使用方法如下:
任务系统使用方法:
  1. 任务系统使用方法:

  2. 地图提示篇:
  3.   在事件里插入脚本 如下
  4.   ---Script Begin---
  5.     $game_maphint.clear
  6.     str="地图提示功能"
  7.     $game_maphint.setText(0,str)
  8.     str="测试"
  9.     $game_maphint.setText(1,str)
  10.     str="第三行了"
  11.     $game_maphint.setText(2,str)
  12.     str="这是最后一行"
  13.     $game_maphint.setText(3,str)
  14.   ----Script End----
  15.   
  16.   脚本功能:
  17.   $game_maphint.clear
  18.   ——清除之前地图提示的文字。
  19.   $game_maphint.setText(<行号>,<文字>)
  20.   ——设定指定行号上的文字。
  21.   
  22.   
  23.   
  24. 任务篇:
  25.   在事件里插入脚本(添加任务) 如下
  26.   ---Script Begin---
  27.     @p=$game_missions.getNoMission
  28.     str="搞定这个游戏"
  29.     $game_missions.mission(@p).setTitle(str)
  30.     str="慢慢享受游戏的乐趣吧~~"
  31.     $game_missions.mission(@p).setText(0,str)
  32.     str="不是人干的。。。"
  33.     $game_missions.mission(@p).setText(1,str)
  34.     str="奖励:游戏结束"
  35.     $game_missions.mission(@p).setImText(str)
  36.     s1="游戏系统";s2="最终结界";
  37.     $game_missions.mission(@p).setNPC(s1,s2)
  38.     $game_missions.mission(@p).setStatus(true)
  39.   ----Script End----
  40.   
  41.   在事件里插入脚本(交付任务) 如下
  42.   ---Script Begin---
  43.     @p=$game_missions.serMission("搞定这个游戏")
  44.     $game_missions.mission(@p).clear
  45.     $game_missions.mission(@p).setStatus(false)
  46.   ----Script End----
  47.   
  48.   脚本功能:
  49.   * @p指用$game_missions.getNoMission获取的任务代码。
  50.   
  51.   
  52.   $game_missions.mission(@p).clear
  53.   ——清除之前任务的文字。
  54.   
  55.   $game_missions.mission(@p).setText(<行号>,<文字>)
  56.   ——设定指定行号上的任务介绍。
  57.   
  58.   $game_missions.mission(@p).setImText(<文字>)
  59.   ——设定任务重要信息/奖励。
  60.   
  61.   $game_missions.mission(@p).setNPC(<NPC1>,<NPC2>)
  62.   ——设定任务接任务NPC,交付任务NPC。
  63.   
  64.   $game_missions.mission(@p).setStatus(<状态>)  
  65.   ——设定任务状态(True/False)。
  66.   
  67.   $game_missions.getNoMission
  68.   ——找到一个可用的任务代码。
  69.   
  70.   $game_missions.serMission(<任务标题>)
  71.   ——找到对应任务编码。

  72.   * $game_missions.serMission(<任务标题>)的返回值为-1时说明任务不存在,否则返回此任务编码。
  73.   * 在条件分歧中插入脚本$game_missions.serMission(<任务标题>)!=-1可判断任务是否正在进行。
复制代码
这个才是任务系统的脚本:
  1. #==============================================================================
  2. # ■ 任务系统 By SkyZH
  3. #    Version 2
  4. #    bbs.66RPG.com
  5. #------------------------------------------------------------------------------
  6. #  任务系统使用方法:
  7. =begin

  8. 地图提示篇:
  9.   在事件里插入脚本 如下
  10.   ---Script Begin---
  11.     $game_maphint.clear
  12.     str="地图提示功能"
  13.     $game_maphint.setText(0,str)
  14.     str="测试"
  15.     $game_maphint.setText(1,str)
  16.     str="第三行了"
  17.     $game_maphint.setText(2,str)
  18.     str="这是最后一行"
  19.     $game_maphint.setText(3,str)
  20.   ----Script End----
  21.   
  22.   脚本功能:
  23.   $game_maphint.clear
  24.   ——清除之前地图提示的文字。
  25.   $game_maphint.setText(<行号>,<文字>)
  26.   ——设定指定行号上的文字。
  27.   
  28.   
  29.   
  30. 任务篇:
  31.   在事件里插入脚本(添加任务) 如下
  32.   ---Script Begin---
  33.     @p=$game_missions.getNoMission
  34.     str="搞定这个游戏"
  35.     $game_missions.mission(@p).setTitle(str)
  36.     str="慢慢享受游戏的乐趣吧~~"
  37.     $game_missions.mission(@p).setText(0,str)
  38.     str="不是人干的。。。"
  39.     $game_missions.mission(@p).setText(1,str)
  40.     str="奖励:游戏结束"
  41.     $game_missions.mission(@p).setImText(str)
  42.     s1="游戏系统";s2="最终结界";
  43.     $game_missions.mission(@p).setNPC(s1,s2)
  44.     $game_missions.mission(@p).setStatus(true)
  45.   ----Script End----
  46.   
  47.   在事件里插入脚本(交付任务) 如下
  48.   ---Script Begin---
  49.     @p=$game_missions.serMission("搞定这个游戏")
  50.     $game_missions.mission(@p).clear
  51.     $game_missions.mission(@p).setStatus(false)
  52.   ----Script End----
  53.   
  54.   脚本功能:
  55.   * @p指用$game_missions.getNoMission获取的任务代码。、
  56.   
  57.   
  58.   $game_missions.mission(@p).clear
  59.   ——清除之前任务的文字。
  60.   
  61.   $game_missions.mission(@p).setText(<行号>,<文字>)
  62.   ——设定指定行号上的任务介绍。
  63.   
  64.   $game_missions.mission(@p).setImText(<文字>)
  65.   ——设定任务重要信息/奖励。
  66.   
  67.   $game_missions.mission(@p).setNPC(<NPC1>,<NPC2>)
  68.   ——设定任务接任务NPC,交付任务NPC。
  69.   
  70.   $game_missions.mission(@p).setStatus(<状态>)  
  71.   ——设定任务状态(True/False)。
  72.   
  73.   $game_missions.getNoMission
  74.   ——找到一个可用的任务代码。
  75.   
  76.   $game_missions.serMission(<任务标题>)
  77.   ——找到对应任务编码。
  78.   * $game_missions.serMission(<任务标题>)的返回值为-1时说明任务不存在,否则返回此任
  79.   务编码。
  80.   * 在条件分歧中插入脚本$game_missions.serMission(<任务标题>)!=-1可判断任务是否正在
  81.   进行。
  82.   
  83.   
  84.   

  85. =end
  86. #==============================================================================


  87. #==============================================================================
  88. # ■ Game_MapHint
  89. #------------------------------------------------------------------------------
  90. #  地图提示信息显示。
  91. #==============================================================================
  92. class Game_MapHint
  93.   
  94.   def initialize
  95.     @texts = []
  96.   end
  97.   
  98.   def visible_line
  99.     @texts.size
  100.   end
  101.   
  102.   def text(line)
  103.     @texts[line]
  104.   end
  105.   
  106.   def setText(line , text)
  107.     @texts[line]=text
  108.   end
  109.   
  110.   def clear
  111.     for i in [email protected]
  112.       @texts.delete_at(i)
  113.     end
  114.   end
  115.   
  116. end

  117. #==============================================================================
  118. # ■ Game_Mission
  119. #------------------------------------------------------------------------------
  120. #  任务信息显示。
  121. #==============================================================================
  122. class Game_Mission
  123.   
  124.   def initialize
  125.     @texts = Array.new
  126.     @texts[0] = ""
  127.     @titletext = ""
  128.     @imtext = ""
  129.     @NPC1 = ""
  130.     @NPC2 = ""
  131.     @bool_mission = false
  132.   end
  133.   
  134.   def setText(line, text)
  135.     @texts[line]=text
  136.   end
  137.   
  138.   def setTitle(text)
  139.     @tetlitext=text
  140.   end
  141.   
  142.   def setImText(text)
  143.     @imtext=text
  144.   end
  145.   
  146.   def setNPC(t1, t2)
  147.     @NPC1=t1
  148.     @NPC2=t2
  149.   end

  150.   def setStatus(b)
  151.     @bool_mission=b
  152.   end

  153.   def getText(line)
  154.     @texts[line]
  155.   end
  156.   
  157.   def visible_line
  158.     @texts.size
  159.   end

  160.   def getTitle
  161.     @tetlitext
  162.   end
  163.   
  164.   def getImText
  165.     @imtext
  166.   end
  167.   
  168.   def getNPC1
  169.     @NPC1
  170.   end
  171.   
  172.   def getNPC2
  173.     @NPC2
  174.   end

  175.   def getStatus
  176.     @bool_mission
  177.   end

  178.   
  179.   
  180.   def clear
  181.     for i in [email protected]
  182.       @texts.delete_at(i)
  183.     end
  184.    
  185.     @titletext = ""
  186.     @imtext = ""
  187.     @NPC1 = ""
  188.     @NPC2 = ""
  189.     @bool_mission = false
  190.   end
  191.   
  192. end


  193. #==============================================================================
  194. # ■ Game_Missions
  195. #------------------------------------------------------------------------------
  196. #  任务信息包装。
  197. #==============================================================================
  198. class Game_Missions
  199.   
  200.   def initialize
  201.     @mission_array=Array.new
  202.     for i in 0...100
  203.       @mission_array[i]=Game_Mission.new
  204.     end
  205.   end
  206.   
  207.   def mission(t)
  208.     return @mission_array[t]
  209.   end
  210.   
  211.   def getNoMission
  212.     for i in 0...100
  213.       if @mission_array[i].getStatus==false
  214.         return i
  215.       end
  216.     end
  217.    
  218.   end
  219.   
  220.   def clear
  221.     for i in 0...100
  222.       @mission_array[i].clear
  223.     end   
  224.   end
  225.   
  226.   def serMission(titletext)
  227.     for i in 0...100
  228.       if @mission_array[i].getTitle==titletext && @mission_array[i].getStatus==true then
  229.         return i
  230.       end
  231.     end
  232.     return -1
  233.       
  234.   end
  235.   
  236.   def getMissionNum
  237.     @r=0
  238.     for i in 99..0
  239.       if @mission_array[i].getStatus==true
  240.         @r=@r+1
  241.       end
  242.     end
  243.     return @r
  244.   end
  245. end


  246. #==============================================================================
  247. # ■ Window_MapHint
  248. #------------------------------------------------------------------------------
  249. #  显示地图信息。 By SkyZH
  250. #==============================================================================

  251. class Window_MapHint < Window_Base
  252.   #--------------------------------------------------------------------------
  253.   # ● 初始化对像
  254.   #--------------------------------------------------------------------------
  255.   def initialize(x, y)
  256.     super(x, y, window_width, Graphics.height)
  257.     self.openness = 0
  258.     open
  259.     refresh
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● 获取窗口的宽度
  263.   #--------------------------------------------------------------------------
  264.   def window_width
  265.     return Graphics.width - 256
  266.   end
  267.   
  268.   def draw_title   
  269.     self.contents.font.color=system_color
  270.     self.contents.font.size=48
  271.     if $game_map.display_name.empty?
  272.       draw_text(4, 0, window_width-40, self.contents.font.size,"提示",1)
  273.     else
  274.       draw_text(4, 0, window_width-40, self.contents.font.size,"提示 - " + $game_map.display_name,1)
  275.     end
  276.    
  277.     self.contents.font.color=normal_color
  278.     self.contents.font.size=Font.default_size
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # ● 刷新
  282.   #--------------------------------------------------------------------------
  283.   def refresh
  284.     draw_title
  285.     for i in 0...$game_maphint.visible_line
  286.       @tempn=$game_maphint.text(i)
  287.       draw_text(4, line_height*(i)+48, window_width-40, self.contents.font.size ,@tempn,1)
  288.     end
  289.   end
  290. end


  291. #==============================================================================
  292. # ■ Window_MissionShow
  293. #------------------------------------------------------------------------------
  294. #  显示任务信息。 By SkyZH
  295. #==============================================================================

  296. class Window_MissionShow < Window_Selectable
  297.   #--------------------------------------------------------------------------
  298.   # ● 初始化对像
  299.   #--------------------------------------------------------------------------
  300.   def initialize(x, y)
  301.     super(x, y, window_width, Graphics.height)
  302.     self.openness = 0
  303.     open
  304.   end
  305.   
  306.   def setNumber(numbers)
  307.     @Mnumber=numbers
  308.     refresh
  309.   end
  310.   
  311.   #--------------------------------------------------------------------------
  312.   # ● 获取窗口的宽度
  313.   #--------------------------------------------------------------------------
  314.   def window_width
  315.     return Graphics.width
  316.   end
  317.   
  318.   def draw_title(text, line, size ,dwhere ,color)
  319.     self.contents.font.color=color
  320.     self.contents.font.size=size
  321.    
  322.     draw_text(4, line*line_height , window_width-40, size, text ,dwhere)
  323.     self.contents.font.color=normal_color
  324.     self.contents.font.size=Font.default_size
  325.   end  
  326.   #--------------------------------------------------------------------------
  327.   # ● 刷新
  328.   #--------------------------------------------------------------------------
  329.   def refresh
  330.     contents.clear
  331.     @texts= $game_missions.mission(@Mnumber).getTitle
  332.     @vl= $game_missions.mission(@Mnumber).visible_line
  333.     draw_title(@texts,0,48,1,Color.new(255,100,100))
  334.     draw_title("任务介绍",2,22,0,Color.new(100,255,255))
  335.     for i in 0...@vl
  336.       draw_title($game_missions.mission(@Mnumber).getText(i),3+i,18,0,Color.new(255,255,255))
  337.     end
  338.     draw_title("任务奖励/重要信息",4 + @vl,22,0,Color.new(100,255,255))
  339.     draw_title($game_missions.mission(@Mnumber).getImText,5 + @vl,18,0,Color.new(255,255,255))
  340.     draw_title("领取任务NPC",7 + @vl,22,0,Color.new(100,255,255))
  341.     draw_title($game_missions.mission(@Mnumber).getNPC1,8 + @vl,18,0,Color.new(255,255,255))
  342.     draw_title("交接任务NPC",10 + @vl,22,0,Color.new(100,255,255))
  343.     draw_title($game_missions.mission(@Mnumber).getNPC2,11 + @vl,18,0,Color.new(255,255,255))
  344.    
  345.   end
  346.   
  347. end


  348. #==============================================================================
  349. # ■ Window_MenuCommand
  350. #------------------------------------------------------------------------------
  351. #  任务画面中显示指令的窗口 By SkyZH
  352. #==============================================================================

  353. class Window_MissionCommand < Window_Command
  354.   #--------------------------------------------------------------------------
  355.   # ● 初始化对象
  356.   #--------------------------------------------------------------------------
  357.   def initialize
  358.     super(0, 0)
  359.   end
  360.   #--------------------------------------------------------------------------
  361.   # ● 获取窗口的宽度
  362.   #--------------------------------------------------------------------------
  363.   def window_width
  364.     return 256
  365.   end
  366.   #--------------------------------------------------------------------------
  367.   # ● 获取显示行数
  368.   #--------------------------------------------------------------------------
  369.   def visible_line_number
  370.     (Graphics.height-standard_padding*2)/line_height
  371.   end
  372.   #--------------------------------------------------------------------------
  373.   # ● 生成指令列表
  374.   #--------------------------------------------------------------------------
  375.   def make_command_list
  376.     add_original_commands
  377.     add_return_command
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ● 独自添加指令用
  381.   #--------------------------------------------------------------------------
  382.   def add_original_commands
  383.     for i in 0...100
  384.       @r=i+1
  385.       @t="mission" + i.to_s
  386.       if $game_missions.mission(i).getStatus==true
  387.         add_command($game_missions.mission(i).getTitle, @t.to_sym)
  388.       end
  389.     end
  390.   end
  391.   #--------------------------------------------------------------------------
  392.   # ● 结束指令用
  393.   #--------------------------------------------------------------------------
  394.   def add_return_command
  395.     add_command("返回", :returnsc)
  396.   end
  397.   #--------------------------------------------------------------------------
  398.   # ● 按下确定键时的处理
  399.   #--------------------------------------------------------------------------
  400.   def process_ok
  401.     super
  402.   end
  403.   
  404.   def call_handler(symbol)
  405.     @handler[symbol].call(symbol.id2name[7,symbol.id2name.size-7].to_i) if handle?(symbol)
  406.   end
  407. end


  408. #encoding:utf-8
  409. #==============================================================================
  410. # ■ Scene_Mission
  411. #------------------------------------------------------------------------------
  412. #  任务
  413. #==============================================================================

  414. class Scene_Mission < Scene_MenuBase
  415.   #--------------------------------------------------------------------------
  416.   # ● 开始处理
  417.   #--------------------------------------------------------------------------
  418.   def start
  419.     super
  420.     create_command_window
  421.   end
  422.   #--------------------------------------------------------------------------
  423.   # ● 生成指令窗口
  424.   #--------------------------------------------------------------------------
  425.   def create_command_window
  426.     @maphint_window= Window_MapHint.new(256,0)
  427.     @command_window = Window_MissionCommand.new
  428.     @window_missionShow=Window_MissionShow.new(0,0)
  429.     @window_missionShow.hide
  430.     @command_window.set_handler(:returnsc,    method(:scenereturns))
  431.     @command_window.set_handler(:cancel,      method(:scenereturns))
  432.     @window_missionShow.set_handler(:cancel,  method(:missionHide))
  433.     @window_missionShow.set_handler(:ok,      method(:missionHide))
  434.     for i in 0...100
  435.       @r=i
  436.       @t="mission" + i.to_s
  437.       @command_window.set_handler(@t.to_sym, method(:missionShow))
  438.     end
  439.    
  440.   end
  441.   
  442.   def scenereturns( t)
  443.     SceneManager.return
  444.   end

  445.   def missionShow( t)
  446.     @window_missionShow.setNumber(t)
  447.     @command_window.deactivate
  448.     @window_missionShow.activate
  449.     @window_missionShow.openness=0
  450.     @window_missionShow.show
  451.     @window_missionShow.open
  452.   end
  453.   
  454.   def missionHide
  455.     @command_window.activate
  456.     @window_missionShow.deactivate
  457.     @window_missionShow.close
  458.     update until @window_missionShow.close?
  459.     @window_missionShow.hide
  460.   end

  461. end




  462. #==============================================================================
  463. # ■ DataManager
  464. #------------------------------------------------------------------------------
  465. #  数据库和游戏实例的管理器。所有在游戏中使用的全局变量都在这里初始化。
  466. #==============================================================================

  467. module DataManager
  468.   #--------------------------------------------------------------------------
  469.   # ● 生成各种游戏对象
  470.   #--------------------------------------------------------------------------
  471.   def self.create_game_objects
  472.     $game_temp          = Game_Temp.new
  473.     $game_system        = Game_System.new
  474.     $game_timer         = Game_Timer.new
  475.     $game_message       = Game_Message.new
  476.     $game_switches      = Game_Switches.new
  477.     $game_variables     = Game_Variables.new
  478.     $game_self_switches = Game_SelfSwitches.new
  479.     $game_actors        = Game_Actors.new
  480.     $game_party         = Game_Party.new
  481.     $game_troop         = Game_Troop.new
  482.     $game_map           = Game_Map.new
  483.     $game_player        = Game_Player.new
  484.     $game_maphint       = Game_MapHint.new
  485.     $game_missions      = Game_Missions.new
  486.   end
  487.   #--------------------------------------------------------------------------
  488.   # ● 生成存档内容
  489.   #--------------------------------------------------------------------------
  490.   def self.make_save_contents
  491.     contents = {}
  492.     contents[:system]        = $game_system
  493.     contents[:timer]         = $game_timer
  494.     contents[:message]       = $game_message
  495.     contents[:switches]      = $game_switches
  496.     contents[:variables]     = $game_variables
  497.     contents[:self_switches] = $game_self_switches
  498.     contents[:actors]        = $game_actors
  499.     contents[:party]         = $game_party
  500.     contents[:troop]         = $game_troop
  501.     contents[:map]           = $game_map
  502.     contents[:player]        = $game_player
  503.     contents[:maphint]       = $game_maphint
  504.     contents[:missions]      = $game_missions
  505.     contents
  506.   end
  507.   #--------------------------------------------------------------------------
  508.   # ● 展开存档内容
  509.   #--------------------------------------------------------------------------
  510.   def self.extract_save_contents(contents)
  511.     $game_system        = contents[:system]
  512.     $game_timer         = contents[:timer]
  513.     $game_message       = contents[:message]
  514.     $game_switches      = contents[:switches]
  515.     $game_variables     = contents[:variables]
  516.     $game_self_switches = contents[:self_switches]
  517.     $game_actors        = contents[:actors]
  518.     $game_party         = contents[:party]
  519.     $game_troop         = contents[:troop]
  520.     $game_map           = contents[:map]
  521.     $game_player        = contents[:player]
  522.     $game_maphint       = contents[:maphint]
  523.     $game_missions      = contents[:missions]
  524.   end
  525. end


  526. #==============================================================================
  527. # ■ Window_MenuCommand
  528. #------------------------------------------------------------------------------
  529. #  菜单画面中显示指令的窗口
  530. #==============================================================================

  531. class Window_MenuCommand < Window_Command
  532.   #--------------------------------------------------------------------------
  533.   # ● 独自添加指令用
  534.   #--------------------------------------------------------------------------
  535.   def add_original_commands
  536.     add_command("地图提示", :maphint)
  537.   end
  538. end



  539. #==============================================================================
  540. # ■ Scene_Menu
  541. #------------------------------------------------------------------------------
  542. #  菜单画面
  543. #==============================================================================

  544. class Scene_Menu < Scene_MenuBase
  545.   #--------------------------------------------------------------------------
  546.   # ● 生成指令窗口
  547.   #--------------------------------------------------------------------------
  548.   def create_command_window
  549.     @command_window = Window_MenuCommand.new
  550.     @command_window.set_handler(:item,      method(:command_item))
  551.     @command_window.set_handler(:skill,     method(:command_personal))
  552.     @command_window.set_handler(:equip,     method(:command_personal))
  553.     @command_window.set_handler(:status,    method(:command_personal))
  554.     @command_window.set_handler(:formation, method(:command_formation))
  555.     @command_window.set_handler(:save,      method(:command_save))
  556.     @command_window.set_handler(:game_end,  method(:command_game_end))
  557.     @command_window.set_handler(:cancel,    method(:return_scene))
  558.    
  559.     @command_window.set_handler(:maphint,   method(:command_maphint))
  560.   end
  561.   
  562.   #--------------------------------------------------------------------------
  563.   # ● 指令“地图提示”
  564.   #--------------------------------------------------------------------------
  565.   def command_maphint
  566.     SceneManager.call(Scene_Mission)
  567.   end
  568.   
  569. end
复制代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者

爪子

梦石
0
星屑
1565
在线时间
866 小时
注册时间
2014-8-28
帖子
1111
4
发表于 2015-7-19 19:15:27 | 只看该作者
https://rpg.blue/forum.php?mod=viewthread&tid=377754
这个 十分好用 简单易懂
直接下载范例 复制粘贴脚本即可
个人坑《凝聚的祈愿》更新日记
网瘾少女的领域-Lofter
一时骂人一时爽,一直骂人一直爽^o^
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 10:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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