| 赞 | 1 |
| VIP | |
| 好人卡 | |
| 积分 | 1 |
| 经验 | |
| 最后登录 | 2020-2-6 |
| 在线时间 | 898 小时 |
矿工
- 梦石
- 0
- 星屑
- 134
- 在线时间
- 898 小时
- 注册时间
- 2012-10-5
- 回帖
- 1303
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 876加几 于 2015-8-27 22:41 编辑
本系统纯属原创。
先看看脚本吧:
[fold=老版本脚本]
Ver 0.1:- class Game_Temp
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_accessor :new_task_name # 新任务 名称
- attr_accessor :new_task_help # 新任务 帮助文字
- attr_accessor :new_task_gold # 新任务 奖励金钱
- attr_accessor :new_task_items # 新任务 奖励物品
- attr_accessor :new_task_weapons # 新任务 奖励武器
- attr_accessor :new_task_armors # 新任务 奖励防具
- attr_accessor :new_task_item_num # 新任务 物品奖励数量
- attr_accessor :new_task_weapon_num # 新任务 武器奖励数量
- attr_accessor :new_task_armor_num # 新任务 防具奖励数量
- attr_accessor :new_task_difficulty
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- @map_bgm = nil
- @message_text = nil
- @message_proc = nil
- @choice_start = 99
- @choice_max = 0
- @choice_cancel_type = 0
- @choice_proc = nil
- @num_input_start = 99
- @num_input_variable_id = 0
- @num_input_digits_max = 0
- @message_window_showing = false
- @common_event_id = 0
- @in_battle = false
- @battle_calling = false
- @battle_troop_id = 0
- @battle_can_escape = false
- @battle_can_lose = false
- @battle_proc = nil
- @battle_turn = 0
- @battle_event_flags = {}
- @battle_abort = false
- @battle_main_phase = false
- @battleback_name = ''
- @forcing_battler = nil
- @shop_calling = false
- @shop_id = 0
- @name_calling = false
- @name_actor_id = 0
- @name_max_char = 0
- @menu_calling = false
- @menu_beep = false
- @save_calling = false
- @debug_calling = false
- @player_transferring = false
- @player_new_map_id = 0
- @player_new_x = 0
- @player_new_y = 0
- @player_new_direction = 0
- @transition_processing = false
- @transition_name = ""
- @gameover = false
- @to_title = false
- @last_file_index = 0
- @debug_top_row = 0
- @debug_index = 0
- @new_task_name = ""
- @new_task_help = ""
- @new_task_gold = ""
- @new_task_items = nil
- @new_task_weapons = nil
- @new_task_armors = nil
- @new_task_item_num = 0
- @new_task_weapon_num = 0
- @new_task_armor_num = 0
- @new_task_difficulty = 1
- end
- #--------------------------------------------------------------------------
- # ● 生成新任务(在Scene_Task的内部使用)
- #--------------------------------------------------------------------------
- def new_task(name, help, difficulty = 1, gold = 0, items = nil, weapons = nil, armors = nil, item_num = 1, weapon_num = 1, armor_num = 1)
- # 实例变量的改变
- @new_task_name = name
- @new_task_help = help
- @new_task_gold = gold
- @new_task_items = items
- @new_task_weapons = weapons
- @new_task_armors = armors
- @new_task_item_num = item_num
- @new_task_weapon_num = weapon_num
- @new_task_armor_num = armor_num
- @new_task_difficulty = difficulty
- $game_taskdata.tasks += 1
- # 保存数据(载入数组)
- if $game_taskdata.task_name[0] == ""
- $game_taskdata.task_name = [@new_task_name]
- $game_taskdata.task_command_name = [@new_task_name]
- $game_taskdata.task_help = [@new_task_help]
- $game_taskdata.task_gold = [@new_task_gold]
- $game_taskdata.task_items = [@new_task_items]
- $game_taskdata.task_weapons = [@new_task_weapons]
- $game_taskdata.task_armors = [@new_task_armors]
- $game_taskdata.task_item_num = [@new_task_item_num]
- $game_taskdata.task_weapon_num = [@new_task_weapon_num]
- $game_taskdata.task_armor_num = [@new_task_armor_num]
- $game_taskdata.task_difficulty = [@new_task_difficulty]
- else
- $game_taskdata.task_name.push(@new_task_name)
- $game_taskdata.task_command_name.push(@new_task_name)
- $game_taskdata.task_help.push(@new_task_help)
- $game_taskdata.task_gold.push(@new_task_gold)
- $game_taskdata.task_items.push(@new_task_items)
- $game_taskdata.task_weapons.push(@new_task_weapons)
- $game_taskdata.task_armors.push(@new_task_armors)
- $game_taskdata.task_item_num.push(@new_task_item_num)
- $game_taskdata.task_weapon_num.push(@new_task_weapon_num)
- $game_taskdata.task_armor_num.push(@new_task_armor_num)
- $game_taskdata.task_difficulty.push(@new_task_difficulty)
- end
- end
- #--------------------------------------------------------------------------
- # ● 完成任务(在Scene_Task的内部使用)
- #--------------------------------------------------------------------------
- def final_task(id, new_line = true)
- # 算出数组中的id
- id = id - 1
- unless $game_taskdata.lose_tasks.include?(id)
- # 修改数组数据
- $game_taskdata.task_command_name[id] = $game_taskdata.task_command_name[id] + "(已完成)"
- $game_taskdata.task_help[id] = new_line == true ? $game_taskdata.task_help[id] + "\n(已完成)" : $game_taskdata.task_help[id] + "(已完成)"
- # 获得任务奖励
- unless $game_taskdata.task_gold[id] == 0
- $game_party.gain_gold($game_taskdata.task_gold[id])
- end
- unless $game_taskdata.task_items[id] == nil
- $game_party.gain_item($game_taskdata.task_items[id], $game_taskdata.task_item_num[id])
- end
- unless $game_taskdata.task_weapons[id] == nil
- $game_party.gain_weapon($game_taskdata.task_weapons[id], $game_taskdata.task_weapon_num[id])
- end
- unless $game_taskdata.task_armors[id] == nil
- $game_party.gain_armor($game_taskdata.task_armors[id], $game_taskdata.task_weapon_num[id])
- end
- end
- end
- #------------------------------------------------------------------------
- # 失败任务(啊啊啊!)
- #------------------------------------------------------------------------
- def lose_task(id, new_line = true)
- id = id - 1
- $game_taskdata.task_command_name[id] = $game_taskdata.task_command_name[id] + "(已失败)"
- $game_taskdata.task_help[id] = new_line = true ? $game_taskdata.task_help[id] + "\n(已失败)" : $game_taskdata.task_help[id] + "(已失败)"
- $game_taskdata.lose_tasks.push(id)
- end
- end
- class Game_TaskData
- attr_accessor :task_name
- attr_accessor :task_command_name
- attr_accessor :task_help
- attr_accessor :task_gold
- attr_accessor :task_items
- attr_accessor :task_weapons
- attr_accessor :task_armors
- attr_accessor :task_item_num
- attr_accessor :task_weapon_num
- attr_accessor :task_armor_num
- attr_accessor :task_difficulty
- attr_accessor :tasks
- attr_accessor :lose_tasks
- def initialize
- @task_name = [""]
- @task_command_name = [""]
- @task_help = [""]
- @task_gold = [0]
- @task_items = [nil]
- @task_weapons = [nil]
- @task_armors = [nil]
- @task_item_num = [0]
- @task_weapon_num = [0]
- @task_armor_num = [0]
- @task_difficulty = [1]
- @tasks = 0
- @lose_tasks = []
- end
- end
- #==============================================================================
- # ■ Window_Task
- #------------------------------------------------------------------------------
- # 显示任务的选择行窗口。
- #==============================================================================
- class Window_Task < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(0, 0, 640, 480 - 64)
- if $game_taskdata.tasks == 0
- @item_max = 1
- @old_max = @item_max
- else
- @item_max = $game_taskdata.tasks
- @old_max = @item_max
- end
- self.contents = Bitmap.new(width - 32, height - 32)
- refresh
- self.index = 0
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- if $game_taskdata.tasks == 0
- @item_max = 1
- else
- @item_max = $game_taskdata.tasks
- end
- if $game_taskdata.task_command_name[0] == ""
- $f = true
- else
- $f = false
- end
- for i in 0...@item_max
- draw_item(i, normal_color)
- end
- end
- #--------------------------------------------------------------------------
- # ● 描绘项目
- # index : 项目编号
- # color : 文字色
- #--------------------------------------------------------------------------
- def draw_item(index,color)
- self.contents.font.color = color
- rect = Rect.new(4, 32 * index, 640 / 2 - 8, 32)
- self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
- for i in 0...@item_max
- self.contents.draw_text(rect, $game_taskdata.task_command_name[index])#ndex
- end
- end
- #--------------------------------------------------------------------------
- # ● 项目无效化
- # index : 项目编号
- #--------------------------------------------------------------------------
- def disable_item(index)
- draw_item(index, disabled_color)
- end
- #--------------------------------------------------------------------------
- # ● 刷新光标矩形
- #--------------------------------------------------------------------------
- def update_cursor_rect
- if [url=home.php?mod=space&uid=370741]@Index[/url] < 0
- self.cursor_rect.empty
- else
- self.cursor_rect.set(0, @index * 32, 320 - 8, 32)
- end
- end
- #--------------------------------------------------------------------------
- # ● 拆分数组并显示内容
- #--------------------------------------------------------------------------
- def update
- super
- if @old_max != @item_max
- refresh
- end
- for i in 0...@item_max
- x = 320 + 16
- if self.index == i and $t == true and $game_taskdata.task_command_name[index] != ""
- refresh
- self.contents.font.color = system_color
- self.contents.draw_text(x, 0, 100, 32, "任务名:")
- self.contents.draw_text(x, 64, 100, 32, "难度:")
- self.contents.draw_text(x, 112, 100, 32, "说明:")
- if $game_taskdata.task_gold[index] != 0
- self.contents.draw_text(x, 208, 100, 32, "奖励金钱:")
- y = 272
- else
- y = 208
- end
- if $game_taskdata.task_items[index] != nil
- self.contents.draw_text(x, y, 100, 32, "奖励物品:")
- end
- self.contents.font.color = normal_color
- self.contents.draw_text(x, 32, 320 - 32, 32, $game_taskdata.task_name[index])
- self.contents.draw_text(x, 144, 288, 32, $game_taskdata.task_help[index].split(/\n/)[0])
- if $game_taskdata.task_help[index].split(/\n/)[1] != nil
- self.contents.draw_text(x, 176, 288, 32, $game_taskdata.task_help[index].split(/\n/)[1])
- end
- if $game_taskdata.task_gold[index] != 0
- self.contents.draw_text(x, 240, 100, 32, $game_taskdata.task_gold[index])
- end
- if $game_taskdata.task_items[index] != nil
- draw_item_name($data_items[$game_taskdata.task_items[index]], x, y + 32)
- self.contents.draw_text(x + 100, y + 32, 280, 32, " × " + $game_taskdata.task_item_num[index].to_s)
- end
- if $game_taskdata.task_weapons[index] != nil
- draw_item_name($data_weapons[$game_taskdata.task_weapons[index]], x, y + 64)
- self.contents.draw_text(x + 100, y + 32, 280, 32, " × " + $game_taskdata.task_weapon_num[index].to_s)
- end
- if $game_taskdata.task_armors[index] != nil
- draw_item_name($data_armors[$game_taskdata.task_armors[index]], x, y + 96)
- self.contents.draw_text(x + 100, y + 32, 280, 32, " × " + $game_taskdata.task_armor_num[index].to_s)
- end
- text1 = "★" * $game_taskdata.task_difficulty[index]
- text2 = "☆" * (5 - $game_taskdata.task_difficulty[index])
- text = text1 + text2
- self.contents.draw_text(x + 60, 64, 280, 32, text)
- end
- end
- # 解除任务信息
- if $t == true
- # 按下 B 键的情况下
- if Input.trigger?(Input::B)
- $t = false
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- end
- if Input.trigger?(Input::UP)
- $t = false
- $game_system.se_play($data_system.cursor_se)
- end
- if Input.trigger?(Input::DOWN)
- $t = false
- $game_system.se_play($data_system.cursor_se)
- end
- end
- if $t == false
- refresh
- end
- end
- end
- #==============================================================================
- # ■ Window_TaskAssist
- #------------------------------------------------------------------------------
- # 显示任务辅助的窗口。
- #==============================================================================
- class Window_TaskAssist < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化窗口
- #--------------------------------------------------------------------------
- def initialize
- super(0, 0, 640, 64)
- self.contents = Bitmap.new(width - 32, height - 32)
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- self.contents.font.color = normal_color
- self.contents.draw_text(0, 0, 640 - 32, 32, "任务", 1)
- end
- end
- #===============================================================================
- # ● Scene_Task
- #-------------------------------------------------------------------------------
- # 处理任务画面的类。
- #===============================================================================
- class Scene_Task
- #--------------------------------------------------------------------------
- # ● 主处理
- #--------------------------------------------------------------------------
- def main
- # 生成任务活动窗口
- @task_window = Window_Task.new
- @task_window.y = 64
- if @task_window.active == false
- @task_window.active = true
- end
- # 生成任务辅助窗口
- @taskassist_window = Window_TaskAssist.new
- # 执行过渡
- Graphics.transition
- # 主循环
- loop do
- # 刷新游戏画面
- Graphics.update
- # 刷新输入信息
- Input.update
- # 刷新画面
- update
- # 如果切换画面就中断循环
- if $scene != self
- break
- end
- end
- # 准备过渡
- Graphics.freeze
- # 释放各个窗口
- @task_window.dispose
- @taskassist_window.dispose
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- # 刷新各个窗口
- @task_window.update
- @taskassist_window.update
- # 解除任务信息
- if $t == true
- # 按下 B 键的情况下
- if Input.trigger?(Input::B)
- $t = false
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- end
- if Input.trigger?(Input::UP)
- $t = false
- $game_system.se_play($data_system.cursor_se)
- end
- if Input.trigger?(Input::DOWN)
- $t = false
- $game_system.se_play($data_system.cursor_se)
- end
- end
- if $game_taskdata.tasks != 0
- $f = false
- end
- # 当按下 C 键后可查看任务信息
- if Input.trigger?(Input::C) and $game_taskdata.tasks != 0
- $t = true #让T变为true
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- end
- # 没显示任务时按下 B 键的情况下
- if $t == false and Input.trigger?(Input::B)
- # 切换到菜单界面
- $scene = Scene_Menu.new(5)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- end
- if $f == true
- if Input.trigger?(Input::C)
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- end
- if Input.trigger?(Input::B)
- # 切换到菜单界面
- $scene = Scene_Menu.new(5)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- end
- end
- end
- end
- class Scene_Title
- #--------------------------------------------------------------------------
- # ● 命令 : 新游戏
- #--------------------------------------------------------------------------
- def command_new_game
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 停止 BGM
- Audio.bgm_stop
- # 重置测量游戏时间用的画面计数器
- Graphics.frame_count = 0
- # 生成各种游戏对像
- $game_temp = Game_Temp.new
- $game_system = Game_System.new
- $game_switches = Game_Switches.new
- $game_variables = Game_Variables.new
- $game_self_switches = Game_SelfSwitches.new
- $game_screen = Game_Screen.new
- $game_actors = Game_Actors.new
- $game_party = Game_Party.new
- $game_troop = Game_Troop.new
- $game_map = Game_Map.new
- $game_player = Game_Player.new
- $game_taskdata = Game_TaskData.new
- # 设置初期同伴位置
- $game_party.setup_starting_members
- # 设置初期位置的地图
- $game_map.setup($data_system.start_map_id)
- # 主角向初期位置移动
- $game_player.moveto($data_system.start_x, $data_system.start_y)
- # 刷新主角
- $game_player.refresh
- # 执行地图设置的 BGM 与 BGS 的自动切换
- $game_map.autoplay
- # 刷新地图 (执行并行事件)
- $game_map.update
- # 切换地图画面
- $scene = Scene_Map.new
- end
- end
- class Scene_Save < Scene_File
- #--------------------------------------------------------------------------
- # ● 写入存档数据
- # file : 写入用文件对像 (已经打开)
- #--------------------------------------------------------------------------
- def write_save_data(file)
- # 生成描绘存档文件用的角色图形
- characters = []
- for i in 0...$game_party.actors.size
- actor = $game_party.actors[i]
- characters.push([actor.character_name, actor.character_hue])
- end
- # 写入描绘存档文件用的角色数据
- Marshal.dump(characters, file)
- # 写入测量游戏时间用画面计数
- Marshal.dump(Graphics.frame_count, file)
- # 增加 1 次存档次数
- $game_system.save_count += 1
- # 保存魔法编号
- # (将编辑器保存的值以随机值替换)
- $game_system.magic_number = $data_system.magic_number
- # 写入各种游戏对像
- Marshal.dump($game_system, file)
- Marshal.dump($game_switches, file)
- Marshal.dump($game_variables, file)
- Marshal.dump($game_self_switches, file)
- Marshal.dump($game_screen, file)
- Marshal.dump($game_actors, file)
- Marshal.dump($game_party, file)
- Marshal.dump($game_troop, file)
- Marshal.dump($game_map, file)
- Marshal.dump($game_player, file)
- Marshal.dump($game_taskdata, file)
- end
- end
- class Scene_Load < Scene_File
- #--------------------------------------------------------------------------
- # ● 读取存档数据
- # file : 读取用文件对像 (已经打开)
- #--------------------------------------------------------------------------
- def read_save_data(file)
- # 读取描绘存档文件用的角色数据
- characters = Marshal.load(file)
- # 读取测量游戏时间用画面计数
- Graphics.frame_count = Marshal.load(file)
- # 读取各种游戏对像
- $game_system = Marshal.load(file)
- $game_switches = Marshal.load(file)
- $game_variables = Marshal.load(file)
- $game_self_switches = Marshal.load(file)
- $game_screen = Marshal.load(file)
- $game_actors = Marshal.load(file)
- $game_party = Marshal.load(file)
- $game_troop = Marshal.load(file)
- $game_map = Marshal.load(file)
- $game_player = Marshal.load(file)
- $game_taskdata = Marshal.load(file)
- # 魔法编号与保存时有差异的情况下
- # (加入编辑器的编辑过的数据)
- if $game_system.magic_number != $data_system.magic_number
- # 重新装载地图
- $game_map.setup($game_map.map_id)
- $game_player.center($game_player.x, $game_player.y)
- end
- # 刷新同伴成员
- $game_party.refresh
- end
- end
复制代码 Ver 0.2:- class Game_Temp
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_accessor :new_task_name # 新任务 名称
- attr_accessor :new_task_help # 新任务 帮助文字
- attr_accessor :new_task_gold # 新任务 奖励金钱
- attr_accessor :new_task_items # 新任务 奖励物品
- attr_accessor :new_task_weapons # 新任务 奖励武器
- attr_accessor :new_task_armors # 新任务 奖励防具
- attr_accessor :new_task_item_num # 新任务 物品奖励数量
- attr_accessor :new_task_weapon_num # 新任务 武器奖励数量
- attr_accessor :new_task_armor_num # 新任务 防具奖励数量
- attr_accessor :new_task_difficulty
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- @map_bgm = nil
- @message_text = nil
- @message_proc = nil
- @choice_start = 99
- @choice_max = 0
- @choice_cancel_type = 0
- @choice_proc = nil
- @num_input_start = 99
- @num_input_variable_id = 0
- @num_input_digits_max = 0
- @message_window_showing = false
- @common_event_id = 0
- @in_battle = false
- @battle_calling = false
- @battle_troop_id = 0
- @battle_can_escape = false
- @battle_can_lose = false
- @battle_proc = nil
- @battle_turn = 0
- @battle_event_flags = {}
- @battle_abort = false
- @battle_main_phase = false
- @battleback_name = ''
- @forcing_battler = nil
- @shop_calling = false
- @shop_id = 0
- @name_calling = false
- @name_actor_id = 0
- @name_max_char = 0
- @menu_calling = false
- @menu_beep = false
- @save_calling = false
- @debug_calling = false
- @player_transferring = false
- @player_new_map_id = 0
- @player_new_x = 0
- @player_new_y = 0
- @player_new_direction = 0
- @transition_processing = false
- @transition_name = ""
- @gameover = false
- @to_title = false
- @last_file_index = 0
- @debug_top_row = 0
- @debug_index = 0
- @new_task_name = ""
- @new_task_help = ""
- @new_task_gold = ""
- @new_task_items = nil
- @new_task_weapons = nil
- @new_task_armors = nil
- @new_task_item_num = 0
- @new_task_weapon_num = 0
- @new_task_armor_num = 0
- @new_task_difficulty = 1
- end
- #--------------------------------------------------------------------------
- # ● 生成新任务(在Scene_Task的内部使用)
- #--------------------------------------------------------------------------
- def new_task(name, help, difficulty = 1, gold = 0, items = nil, weapons = nil, armors = nil, item_num = 1, weapon_num = 1, armor_num = 1)
- # 实例变量的改变
- @new_task_name = name
- @new_task_help = help
- @new_task_gold = gold
- @new_task_items = items
- @new_task_weapons = weapons
- @new_task_armors = armors
- @new_task_item_num = item_num
- @new_task_weapon_num = weapon_num
- @new_task_armor_num = armor_num
- @new_task_difficulty = difficulty
- $game_taskdata.tasks += 1
- # 保存数据(载入数组)
- if $game_taskdata.task_name[0] == ""
- $game_taskdata.task_name = [@new_task_name]
- $game_taskdata.task_command_name = [@new_task_name]
- $game_taskdata.task_help = [@new_task_help]
- $game_taskdata.task_gold = [@new_task_gold]
- $game_taskdata.task_items = [@new_task_items]
- $game_taskdata.task_weapons = [@new_task_weapons]
- $game_taskdata.task_armors = [@new_task_armors]
- $game_taskdata.task_item_num = [@new_task_item_num]
- $game_taskdata.task_weapon_num = [@new_task_weapon_num]
- $game_taskdata.task_armor_num = [@new_task_armor_num]
- $game_taskdata.task_difficulty = [@new_task_difficulty]
- else
- $game_taskdata.task_name.push(@new_task_name)
- $game_taskdata.task_command_name.push(@new_task_name)
- $game_taskdata.task_help.push(@new_task_help)
- $game_taskdata.task_gold.push(@new_task_gold)
- $game_taskdata.task_items.push(@new_task_items)
- $game_taskdata.task_weapons.push(@new_task_weapons)
- $game_taskdata.task_armors.push(@new_task_armors)
- $game_taskdata.task_item_num.push(@new_task_item_num)
- $game_taskdata.task_weapon_num.push(@new_task_weapon_num)
- $game_taskdata.task_armor_num.push(@new_task_armor_num)
- $game_taskdata.task_difficulty.push(@new_task_difficulty)
- end
- end
- #--------------------------------------------------------------------------
- # ● 完成任务(在Scene_Task的内部使用)
- #--------------------------------------------------------------------------
- def final_task(id, new_line = true)
- # 算出数组中的id
- id = id - 1
- unless $game_taskdata.lose_tasks.include?(id)
- # 修改数组数据
- $game_taskdata.task_command_name[id] = $game_taskdata.task_command_name[id] + "(已完成)"
- $game_taskdata.task_help[id] = new_line == true ? $game_taskdata.task_help[id] + "\n(已完成)" : $game_taskdata.task_help[id] + "(已完成)"
- # 获得任务奖励
- unless $game_taskdata.task_gold[id] == 0
- $game_party.gain_gold($game_taskdata.task_gold[id])
- end
- unless $game_taskdata.task_items[id] == nil
- $game_party.gain_item($game_taskdata.task_items[id], $game_taskdata.task_item_num[id])
- end
- unless $game_taskdata.task_weapons[id] == nil
- $game_party.gain_weapon($game_taskdata.task_weapons[id], $game_taskdata.task_weapon_num[id])
- end
- unless $game_taskdata.task_armors[id] == nil
- $game_party.gain_armor($game_taskdata.task_armors[id], $game_taskdata.task_weapon_num[id])
- end
- end
- end
- #------------------------------------------------------------------------
- # 失败任务(啊啊啊!)
- #------------------------------------------------------------------------
- def lose_task(id, new_line = true)
- id = id - 1
- $game_taskdata.task_command_name[id] = $game_taskdata.task_command_name[id] + "(已失败)"
- $game_taskdata.task_help[id] = new_line = true ? $game_taskdata.task_help[id] + "\n(已失败)" : $game_taskdata.task_help[id] + "(已失败)"
- $game_taskdata.lose_tasks.push(id)
- end
- end
- class Game_TaskData
- attr_accessor :task_name
- attr_accessor :task_command_name
- attr_accessor :task_help
- attr_accessor :task_gold
- attr_accessor :task_items
- attr_accessor :task_weapons
- attr_accessor :task_armors
- attr_accessor :task_item_num
- attr_accessor :task_weapon_num
- attr_accessor :task_armor_num
- attr_accessor :task_difficulty
- attr_accessor :tasks
- attr_accessor :lose_tasks
- def initialize
- @task_name = [""]
- @task_command_name = [""]
- @task_help = [""]
- @task_gold = [0]
- @task_items = [nil]
- @task_weapons = [nil]
- @task_armors = [nil]
- @task_item_num = [0]
- @task_weapon_num = [0]
- @task_armor_num = [0]
- @task_difficulty = [1]
- @tasks = 0
- @lose_tasks = []
- end
- end
- #==============================================================================
- # ■ Window_TaskLift
- #------------------------------------------------------------------------------
- # 显示任务的选择行窗口。
- #==============================================================================
- class Window_TaskLift < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(0, 64, 320, 480 - 64)
- if $game_taskdata.tasks == 0
- @item_max = 1
- @old_max = @item_max
- else
- @item_max = $game_taskdata.tasks
- @old_max = @item_max
- end
- self.contents = Bitmap.new(width - 32, @item_max * 32)
- refresh
- self.index = 0
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- if $game_taskdata.tasks == 0
- @item_max = 1
- else
- @item_max = $game_taskdata.tasks
- end
- @old_max = @item_max
- if $game_taskdata.task_command_name[0] == ""
- $f = true
- else
- $f = false
- end
- for i in 0...@item_max
- draw_item(i, normal_color)
- end
- end
- #--------------------------------------------------------------------------
- # ● 描绘项目
- # index : 项目编号
- # color : 文字色
- #--------------------------------------------------------------------------
- def draw_item(index,color)
- self.contents.font.color = color
- rect = Rect.new(4, 32 * index, 640 / 2 - 8, 32)
- self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
- for i in 0...@item_max
- self.contents.draw_text(rect, $game_taskdata.task_command_name[index])#ndex
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新帮助文本
- #--------------------------------------------------------------------------
- def update_help
- if $f != true
- if Input.repeat?(Input::C)
- @help_window.set_task_list(self.index)
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- end
- if Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN) or Input.repeat?(Input::B)
- @help_window.empty
- if Input.trigger?(Input::B)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- end
- end
- else
- if Input.repeat?(Input::C)
- # 演奏无效 SE
- $game_system.se_play($data_system.buzzer_se)
- end
- end
- end
- end
- #==============================================================================
- # ■ Window_TaskRight
- #------------------------------------------------------------------------------
- # 显示任务栏右侧的窗口。
- #==============================================================================
- class Window_TaskRight < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化窗口
- #--------------------------------------------------------------------------
- def initialize
- super(320, 64, 320, 480 - 64)
- self.contents = Bitmap.new(width - 32, height - 32)
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def set_task_list(id)
- if id != @id
- self.contents.clear
- for i in 0...$game_taskdata.tasks
- x = 0
- self.contents.font.color = system_color
- self.contents.draw_text(x, 0, 100, 32, "任务名:")
- self.contents.draw_text(x, 64, 100, 32, "难度:")
- self.contents.draw_text(x, 112, 100, 32, "说明:")
- if $game_taskdata.task_gold[id] != 0
- self.contents.draw_text(x, 208, 100, 32, "奖励金钱:")
- y = 272
- else
- y = 208
- end
- if $game_taskdata.task_items[id] != nil
- self.contents.draw_text(x, y, 100, 32, "奖励物品:")
- end
- self.contents.font.color = normal_color
- self.contents.draw_text(x, 32, 320 - 32, 32, $game_taskdata.task_name[id])
- self.contents.draw_text(x, 144, 288, 32, $game_taskdata.task_help[id].split(/\n/)[0])
- if $game_taskdata.task_help[id].split(/\n/)[1] != nil
- self.contents.draw_text(x, 176, 288, 32, $game_taskdata.task_help[id].split(/\n/)[1])
- end
- if $game_taskdata.task_gold[id] != 0
- self.contents.draw_text(x, 240, 100, 32, $game_taskdata.task_gold[id])
- end
- if $game_taskdata.task_items[id] != nil
- draw_item_name($data_items[$game_taskdata.task_items[id]], x, y + 32)
- self.contents.draw_text(x + 100, y + 32, 280, 32, " × " + $game_taskdata.task_item_num[id].to_s)
- end
- if $game_taskdata.task_weapons[id] != nil
- draw_item_name($data_weapons[$game_taskdata.task_weapons[id]], x, y + 64)
- self.contents.draw_text(x + 100, y + 32, 280, 32, " × " + $game_taskdata.task_weapon_num[id].to_s)
- end
- if $game_taskdata.task_armors[id] != nil
- draw_item_name($data_armors[$game_taskdata.task_armors[id]], x, y + 96)
- self.contents.draw_text(x + 100, y + 32, 280, 32, " × " + $game_taskdata.task_armor_num[id].to_s)
- end
- text1 = "★" * $game_taskdata.task_difficulty[id]
- text2 = "☆" * (5 - $game_taskdata.task_difficulty[id])
- text = text1 + text2
- self.contents.draw_text(x + 60, 64, 280, 32, text)
- end
- @id = id
- end
- end
- end
- #==============================================================================
- # ■ Window_TaskAssist
- #------------------------------------------------------------------------------
- # 显示任务辅助的窗口。
- #==============================================================================
- class Window_TaskAssist < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化窗口
- #--------------------------------------------------------------------------
- def initialize
- super(0, 0, 640, 64)
- self.contents = Bitmap.new(width - 32, height - 32)
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- self.contents.font.color = normal_color
- self.contents.draw_text(0, 0, 640 - 32, 32, "任务", 1)
- end
- end
- #===============================================================================
- # ● Scene_Task
- #-------------------------------------------------------------------------------
- # 处理任务画面的类。
- #===============================================================================
- class Scene_Task
- #--------------------------------------------------------------------------
- # ● 主处理
- #--------------------------------------------------------------------------
- def main
- # 生成任务单窗口
- @task_right_window = Window_TaskRight.new
- # 生成任务活动窗口
- @task_left_window = Window_TaskLift.new
- @task_left_window.help_window = @task_right_window
- if @task_left_window.active == false
- @task_left_window.active = true
- end
- # 生成任务辅助窗口
- @taskassist_window = Window_TaskAssist.new
- # 执行过渡
- Graphics.transition
- # 主循环
- loop do
- # 刷新游戏画面
- Graphics.update
- # 刷新输入信息
- Input.update
- # 刷新画面
- update
- # 如果切换画面就中断循环
- if $scene != self
- break
- end
- end
- # 准备过渡
- Graphics.freeze
- # 释放各个窗口
- @task_left_window.dispose
- @taskassist_window.dispose
- @task_right_window.dispose
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- # 刷新各个窗口
- @task_left_window.update
- @task_right_window.update
- @taskassist_window.update
- # 按下 B 键的情况下
- if Input.trigger?(Input::B)
- # 切换到菜单界面
- $scene = Scene_Menu.new(5)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- end
- end
- end
- class Window_Base
- def empty
- self.contents.clear
- end
- end
- class Scene_Title
- #--------------------------------------------------------------------------
- # ● 命令 : 新游戏
- #--------------------------------------------------------------------------
- def command_new_game
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 停止 BGM
- Audio.bgm_stop
- # 重置测量游戏时间用的画面计数器
- Graphics.frame_count = 0
- # 生成各种游戏对像
- $game_temp = Game_Temp.new
- $game_system = Game_System.new
- $game_switches = Game_Switches.new
- $game_variables = Game_Variables.new
- $game_self_switches = Game_SelfSwitches.new
- $game_screen = Game_Screen.new
- $game_actors = Game_Actors.new
- $game_party = Game_Party.new
- $game_troop = Game_Troop.new
- $game_map = Game_Map.new
- $game_player = Game_Player.new
- $game_taskdata = Game_TaskData.new
- # 设置初期同伴位置
- $game_party.setup_starting_members
- # 设置初期位置的地图
- $game_map.setup($data_system.start_map_id)
- # 主角向初期位置移动
- $game_player.moveto($data_system.start_x, $data_system.start_y)
- # 刷新主角
- $game_player.refresh
- # 执行地图设置的 BGM 与 BGS 的自动切换
- $game_map.autoplay
- # 刷新地图 (执行并行事件)
- $game_map.update
- # 切换地图画面
- $scene = Scene_Map.new
- end
- end
- class Scene_Save < Scene_File
- #--------------------------------------------------------------------------
- # ● 写入存档数据
- # file : 写入用文件对像 (已经打开)
- #--------------------------------------------------------------------------
- def write_save_data(file)
- # 生成描绘存档文件用的角色图形
- characters = []
- for i in 0...$game_party.actors.size
- actor = $game_party.actors[i]
- characters.push([actor.character_name, actor.character_hue])
- end
- # 写入描绘存档文件用的角色数据
- Marshal.dump(characters, file)
- # 写入测量游戏时间用画面计数
- Marshal.dump(Graphics.frame_count, file)
- # 增加 1 次存档次数
- $game_system.save_count += 1
- # 保存魔法编号
- # (将编辑器保存的值以随机值替换)
- $game_system.magic_number = $data_system.magic_number
- # 写入各种游戏对像
- Marshal.dump($game_system, file)
- Marshal.dump($game_switches, file)
- Marshal.dump($game_variables, file)
- Marshal.dump($game_self_switches, file)
- Marshal.dump($game_screen, file)
- Marshal.dump($game_actors, file)
- Marshal.dump($game_party, file)
- Marshal.dump($game_troop, file)
- Marshal.dump($game_map, file)
- Marshal.dump($game_player, file)
- Marshal.dump($game_taskdata, file)
- end
- end
- class Scene_Load < Scene_File
- #--------------------------------------------------------------------------
- # ● 读取存档数据
- # file : 读取用文件对像 (已经打开)
- #--------------------------------------------------------------------------
- def read_save_data(file)
- # 读取描绘存档文件用的角色数据
- characters = Marshal.load(file)
- # 读取测量游戏时间用画面计数
- Graphics.frame_count = Marshal.load(file)
- # 读取各种游戏对像
- $game_system = Marshal.load(file)
- $game_switches = Marshal.load(file)
- $game_variables = Marshal.load(file)
- $game_self_switches = Marshal.load(file)
- $game_screen = Marshal.load(file)
- $game_actors = Marshal.load(file)
- $game_party = Marshal.load(file)
- $game_troop = Marshal.load(file)
- $game_map = Marshal.load(file)
- $game_player = Marshal.load(file)
- $game_taskdata = Marshal.load(file)
- # 魔法编号与保存时有差异的情况下
- # (加入编辑器的编辑过的数据)
- if $game_system.magic_number != $data_system.magic_number
- # 重新装载地图
- $game_map.setup($game_map.map_id)
- $game_player.center($game_player.x, $game_player.y)
- end
- # 刷新同伴成员
- $game_party.refresh
- end
- end
复制代码 [/fold]Ver 0.2版(修正粗体字Bug,已关闭下载):
注意:由于部分人找不到脚本,所以此红字作为指引,下面是下载地址:
Ver 1.0版(大更新,裁图在下面)
任务系统 Ver 1.0.zip
(207.01 KB, 下载次数: 817)
使用方法: #注:[]里的全是选填内容
添加新任务:- $game_temp.new_task(名称, 帮助文本[, 难度, 得到金钱, 得到物品, 得到武器, 得到防具, 物品数量, 武器数量, 防具数量])
复制代码 完成任务:- $game_temp.final_task(任务ID[, 帮助文本分行])
复制代码 失效任务:- $game_temp.lose_task(任务ID[, 帮助文本分行])
复制代码 调用任务画面:Ver 1.0大版本更新,以往的方法将不再支持!
Ver 1.0 添加新任务:
[pre lang="ruby"]$game_temp.new_task(name, help, [difficulty, gold, items, weapons, armors])
=begin
name : 名称
help : 帮助
difficulty : 难度,默认为 1
gold : 赏金,默认为 0(没有赏金)
items : 物品,格式为 {id1 => 数量, id2 => 数量, ...},默认为 {}(没有物品奖励)
weapons(武器) 和 armors(防具)设置方法等同于物品。
=end[/pre]
Ver 1.0 完成任务:
[pre lang="ruby"]$game_temp.final_task(id)[/pre]
Ver 1.0 任务失败:
[pre lang="ruby"]$game_temp.lose_task(id)[/pre]
由于 Ver 1.0 的任务系统物品是两行并列的,所以建议物品汉字长度要小于4,否则会发生堆叠。
注意!如果游戏已经有存档了就别添这个脚本了,否则存档必须全删除,若既有存档还不删除存档的话,读档时就会:出错!
裁图(Ver 0.1):
裁图(Ver 0.2):
裁图(Ver 1.0):
|
评分
-
查看全部评分
|