Project1

标题: 简单的任务系统 [打印本页]

作者: taroxd    时间: 2014-9-21 07:25
标题: 简单的任务系统
本帖最后由 taroxd 于 2014-9-21 07:31 编辑

可以与 https://rpg.blue/thread-371714-1-1.html 该脚本配合使用

RUBY 代码复制
  1. #----------------------------------------------------------------------------
  2. # ● 简单任务系统
  3. #    觉得窗口难看的觉得功能太简陋的要么不用要么就自己改吧。
  4. #----------------------------------------------------------------------------
  5.  
  6. module Taroxd end
  7.  
  8. class Taroxd::Task
  9.   #--------------------------------------------------------------------------
  10.   # ● 任务设定
  11.   #--------------------------------------------------------------------------
  12.   LIST = [
  13.     #------------- 在此设置任务的内容。------------------
  14.     #
  15.     # id: 当该id对应的开关打开时,视为接受了该任务
  16.     #     当该id对应的变量值不小于【目标】时,视为任务完成
  17.     #
  18.     # 任务名称:显示在菜单中的选项名称
  19.     #
  20.     # 任务介绍:显示在顶部的任务介绍
  21.     #
  22.     # 目标:当【id】对应的变量值不小于目标时,视为任务完成(可以不写,默认为1)
  23.     #
  24.     #--------------------------------------------------
  25.     #
  26.     # id 任务名称              任务介绍                       目标
  27.     [ 5, "卖萌",      "想办法把变量5的值弄到2以上。",           2   ],
  28.     [ 6, "继续卖萌",   "当你接到这个任务的时候你就已经完成了。", 0   ],
  29.     #--------------- 任务内容设置结束。-----------------
  30.   ]
  31.   COMPLETED_PREFIX = '\I[125]'      # 任务完成时的前缀,不需要可设置为 ''
  32.   ONGOING_PRIFIX   = '\I[126]'      # 任务进行中的前缀,不需要可设置为 ''
  33.   COMMAND          = '任务'         # 菜单上的指令名,不需要可设置为 nil
  34.   #--------------------------------------------------------------------------
  35.   # ● 初始化
  36.   #--------------------------------------------------------------------------
  37.   def initialize(id, name, description = '', goal = 1)
  38.     @id, @name, @description, @goal = id, name, description, goal
  39.   end
  40.   attr_reader :description
  41.   #--------------------------------------------------------------------------
  42.   # ● 任务名称
  43.   #--------------------------------------------------------------------------
  44.   def name
  45.     (completed? ? COMPLETED_PREFIX : ONGOING_PRIFIX) + @name
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # ● 任务是否开始
  49.   #--------------------------------------------------------------------------
  50.   def started?
  51.     $game_switches[@id]
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 任务是否完成
  55.   #--------------------------------------------------------------------------
  56.   def completed?
  57.     $game_variables[@id] >= @goal
  58.   end
  59.   #--------------------------------------------------------------------------
  60.   # ● 设置任务列表
  61.   #--------------------------------------------------------------------------
  62.   LIST.map! {|args| new(*args) }
  63.   #--------------------------------------------------------------------------
  64.   # ● 获取任务列表
  65.   #--------------------------------------------------------------------------
  66.   def self.list
  67.     LIST.select(&:started?)
  68.   end
  69. end
  70.  
  71. class Window_TaskList < Window_Selectable
  72.   Task = Taroxd::Task
  73.   #--------------------------------------------------------------------------
  74.   # ● 初始化
  75.   #--------------------------------------------------------------------------
  76.   def initialize(y)
  77.     super(0, y, Graphics.width, Graphics.height - y)
  78.     select Task.list.index {|task| !task.completed? }
  79.     refresh
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 获取列数
  83.   #--------------------------------------------------------------------------
  84.   def col_max
  85.     2
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 获取项目数
  89.   #--------------------------------------------------------------------------
  90.   def item_max
  91.     Task.list.size
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 绘制项目
  95.   #--------------------------------------------------------------------------
  96.   def draw_item(index)
  97.     rect = item_rect_for_text(index)
  98.     draw_text_ex(rect.x, rect.y, Task.list[index].name)
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 更新帮助窗口
  102.   #--------------------------------------------------------------------------
  103.   def update_help
  104.     @help_window.set_text(Task.list[index].description)
  105.   end
  106. end
  107.  
  108. class Scene_Task < Scene_MenuBase
  109.   #--------------------------------------------------------------------------
  110.   # ● 开始处理
  111.   #--------------------------------------------------------------------------
  112.   def start
  113.     super
  114.     create_help_window
  115.     create_list_window
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ● 创建任务列表窗口
  119.   #--------------------------------------------------------------------------
  120.   def create_list_window
  121.     @list_window = Window_TaskList.new(@help_window.height)
  122.     @list_window.help_window = @help_window
  123.     @list_window.set_handler(:cancel, method(:return_scene))
  124.     @list_window.activate
  125.   end
  126. end
  127.  
  128. if Taroxd::Task::COMMAND
  129.  
  130. class Window_MenuCommand < Window_Command
  131.   #--------------------------------------------------------------------------
  132.   # ● 独自添加指令用
  133.   #--------------------------------------------------------------------------
  134.   alias aoc_20140921 add_original_commands
  135.   def add_original_commands
  136.     aoc_20140921
  137.     add_command(Taroxd::Task::COMMAND, :task, !Taroxd::Task.list.empty?)
  138.   end
  139. end
  140.  
  141. class Scene_Menu < Scene_MenuBase
  142.   #--------------------------------------------------------------------------
  143.   # ● 生成指令窗口
  144.   #--------------------------------------------------------------------------
  145.   alias ccw_20140921 create_command_window
  146.   def create_command_window
  147.     ccw_20140921
  148.     @command_window.set_handler(:task, method(:command_task))
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # ● 指令“任务”
  152.   #--------------------------------------------------------------------------
  153.   def command_task
  154.     SceneManager.call(Scene_Task)
  155.   end
  156. end
  157.  
  158. end # if Taroxd::Task::COMMAND

作者: 上贺茂润    时间: 2014-9-21 07:53
瓦嗒西不是天使
作者: chd114    时间: 2014-9-21 10:05
我下意识地看了下发帖时间···这个标题和之前那个谁发的一样···




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