#----------------------------------------------------------------------------
# ● 简单任务系统
# 觉得窗口难看的觉得功能太简陋的要么不用要么就自己改吧。
#----------------------------------------------------------------------------
module Taroxd end
class Taroxd::Task
#--------------------------------------------------------------------------
# ● 任务设定
#--------------------------------------------------------------------------
LIST = [
#------------- 在此设置任务的内容。------------------
#
# id: 当该id对应的开关打开时,视为接受了该任务
# 当该id对应的变量值不小于【目标】时,视为任务完成
#
# 任务名称:显示在菜单中的选项名称
#
# 任务介绍:显示在顶部的任务介绍
#
# 目标:当【id】对应的变量值不小于目标时,视为任务完成(可以不写,默认为1)
#
#--------------------------------------------------
#
# id 任务名称 任务介绍 目标
[ 5, "卖萌", "想办法把变量5的值弄到2以上。", 2 ],
[ 6, "继续卖萌", "当你接到这个任务的时候你就已经完成了。", 0 ],
#--------------- 任务内容设置结束。-----------------
]
COMPLETED_PREFIX = '\I[125]' # 任务完成时的前缀,不需要可设置为 ''
ONGOING_PRIFIX = '\I[126]' # 任务进行中的前缀,不需要可设置为 ''
COMMAND = '任务' # 菜单上的指令名,不需要可设置为 nil
#--------------------------------------------------------------------------
# ● 初始化
#--------------------------------------------------------------------------
def initialize(id, name, description = '', goal = 1)
@id, @name, @description, @goal = id, name, description, goal
end
attr_reader :description
#--------------------------------------------------------------------------
# ● 任务名称
#--------------------------------------------------------------------------
def name
(completed? ? COMPLETED_PREFIX : ONGOING_PRIFIX) + @name
end
#--------------------------------------------------------------------------
# ● 任务是否开始
#--------------------------------------------------------------------------
def started?
$game_switches[@id]
end
#--------------------------------------------------------------------------
# ● 任务是否完成
#--------------------------------------------------------------------------
def completed?
$game_variables[@id] >= @goal
end
#--------------------------------------------------------------------------
# ● 设置任务列表
#--------------------------------------------------------------------------
LIST.map! {|args| new(*args) }
#--------------------------------------------------------------------------
# ● 获取任务列表
#--------------------------------------------------------------------------
def self.list
LIST.select(&:started?)
end
end
class Window_TaskList < Window_Selectable
Task = Taroxd::Task
#--------------------------------------------------------------------------
# ● 初始化
#--------------------------------------------------------------------------
def initialize(y)
super(0, y, Graphics.width, Graphics.height - y)
select Task.list.index {|task| !task.completed? }
refresh
end
#--------------------------------------------------------------------------
# ● 获取列数
#--------------------------------------------------------------------------
def col_max
2
end
#--------------------------------------------------------------------------
# ● 获取项目数
#--------------------------------------------------------------------------
def item_max
Task.list.size
end
#--------------------------------------------------------------------------
# ● 绘制项目
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect_for_text(index)
draw_text_ex(rect.x, rect.y, Task.list[index].name)
end
#--------------------------------------------------------------------------
# ● 更新帮助窗口
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(Task.list[index].description)
end
end
class Scene_Task < Scene_MenuBase
#--------------------------------------------------------------------------
# ● 开始处理
#--------------------------------------------------------------------------
def start
super
create_help_window
create_list_window
end
#--------------------------------------------------------------------------
# ● 创建任务列表窗口
#--------------------------------------------------------------------------
def create_list_window
@list_window = Window_TaskList.new(@help_window.height)
@list_window.help_window = @help_window
@list_window.set_handler(:cancel, method(:return_scene))
@list_window.activate
end
end
if Taroxd::Task::COMMAND
class Window_MenuCommand < Window_Command
#--------------------------------------------------------------------------
# ● 独自添加指令用
#--------------------------------------------------------------------------
alias aoc_20140921 add_original_commands
def add_original_commands
aoc_20140921
add_command(Taroxd::Task::COMMAND, :task, !Taroxd::Task.list.empty?)
end
end
class Scene_Menu < Scene_MenuBase
#--------------------------------------------------------------------------
# ● 生成指令窗口
#--------------------------------------------------------------------------
alias ccw_20140921 create_command_window
def create_command_window
ccw_20140921
@command_window.set_handler(:task, method(:command_task))
end
#--------------------------------------------------------------------------
# ● 指令“任务”
#--------------------------------------------------------------------------
def command_task
SceneManager.call(Scene_Task)
end
end
end # if Taroxd::Task::COMMAND